我目前正在 Capybara 中為 Ruby on Rails 網站開發功能測驗,每次嘗試運行此測驗檔案時,都會遇到同樣的錯誤。我在下面列出了測驗代碼,收到的錯誤就在代碼下面,并且只縮短為主要事件。
require 'rails_helper'
RSpec.describe 'Home features' do
it 'displays company name' do
visit "/login"
expect(page).to have_content("Company Name Here")
end
end
1) Home features displays company name
Failure/Error: visit "/login"
URI::InvalidURIError:
bad URI(is not URI?): nil
# /home/linuxuser/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:76:in `build_uri'
...
# ------------------
# --- Caused by: ---
# NoMethodError:
# undefined method `to_str' for nil:NilClass
...
# /home/linuxuser/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:76:in `build_uri'
我當然之前嘗試過自己除錯,因為這是一個 URI 問題,并且我指定了 URI gem,我最初認為這是一個 gem 沖突,當我從 Gemfile 中洗掉它并執行捆綁安裝時,它被反駁了。
之后,我測驗了訪問 url 的變體,包括單引號和雙引號,還嘗試了手動 uri,例如www.google.com,最終導致單獨的 get 錯誤,但是錯誤發生在 uri 錯誤之前,所以我假設那不相關。
非常感謝您提供有關此問題的任何幫助。
=============更新============= 這是來自 config/routes.rb 的片段
match "/login", to: "sessions#new", via: [:get]
match "/login", to: "sessions#create", via: [:post]
===進一步更新 ====== 添加了 StackTrace
FF
Failures:
1) Home features displays company name
Failure/Error: visit "/login"
URI::InvalidURIError:
bad URI(is not URI?): nil
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:76:in `build_uri'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:68:in `process'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:56:in `block in process_and_follow_redirects'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:51:in `times'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:51:in `process_and_follow_redirects'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:24:in `visit'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/driver.rb:46:in `visit'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/session.rb:278:in `visit'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/dsl.rb:53:in `call'
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/dsl.rb:53:in `visit'
# ./spec/features/home_spec.rb:5:in `block (2 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# NoMethodError:
# undefined method `to_str' for nil:NilClass
# /home/aus3r/.rvm/gems/ruby-2.7.4/gems/capybara-3.36.0/lib/capybara/rack_test/browser.rb:76:in `build_uri'
```
uj5u.com熱心網友回復:
在獲得外部支持后,我意識到這是遺留代碼和https://github.com/biola/rack-cas (rack-cas gem) 的問題,需要將此添加到 config/application.rb
config.rack_cas.exclude_paths = "/"
顯然,由于現有的遺留代碼,該站點正在嘗試執行 CAS 身份驗證,這與@ThomasWalpole 和@smathy 提供的回應類似,因為他們提到請求未經身份驗證。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/477399.html
