對於使用Capybara和RSpec的現有Rails應用程序,我將放在一起feature specs。默認情況下,Capybara使用rack_test
作爲驅動程序,但我想使用capybara-webkit。切換後水鴨默認驅動程序401錯誤?
我已經把一個簡單的測試登錄到我的網站。使用rack_test
我能夠登錄,我的log/test.log
文件顯示以下HTTP請求:
Completed 200 OK in 201ms (Views: 201.3ms | ActiveRecord: 0.0ms)
Started POST "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at 2015-12-01 10:20:33 -0600
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign In"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' ORDER BY "users"."id" ASC LIMIT 1
# There are a few more SQL queries here that I've removed
Redirected to http://www.example.com/
Completed 302 Found in 36ms (ActiveRecord: 2.3ms)
Started GET "/" for 127.0.0.1 at 2015-12-01 10:20:33 -0600
Processing by InitiativesController#blank as HTML
我在與運行此測試的問題時,我(在spec_helper.rb
通過設置Capybara.default_driver :webkit
)切換到WebKit的。出於某種原因,我在日誌中看到401錯誤:
Completed 200 OK in 17ms (Views: 16.7ms | ActiveRecord: 0.0ms)
Started POST "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at 2015-12-01 10:21:31 -0600
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign In"}
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' ORDER BY "users"."id" ASC LIMIT 1
# no other queries
Completed 401 Unauthorized in 5ms
Processing by Devise::SessionsController#new as HTML
因此登錄請求未被接受。是否有某種類型的水豚配置需要更改才能使此登錄請求生效?我無法弄清楚是什麼原因造成的。
我spec_helper.rb
看起來是這樣的:
require 'simplecov'
require 'webmock/rspec'
require 'capybara/rspec'
require 'fakeredis/rspec'
require 'site_prism'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
Capybara.javascript_driver = :poltergeist
Capybara.default_driver = :webkit
Capybara.default_host = 'http://127.0.0.1:60400'
Capybara.server_port = 60400
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
Capybara::Webkit.configure do |config|
config.block_unknown_urls
end
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.infer_base_class_for_anonymous_controllers = false
config.include Devise::TestHelpers, :type => [:controller, :acceptance]
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do |example|
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
config.order = "random"
config.before(:all) do
FactoryGirl.reload
end
config.before :each do
Timecop.return
end
config.include Helpers
config.include Helpers::MassAdsCreation
end
WebMock.disable_net_connect!(allow_localhost: true)
你能分享你的spec_helper嗎?一般來說,我想說你必須下載'qt'庫並安裝gem,然後將'gem'capybara-webkit''添加到你的gem文件中,添加'require'capybara-webkit'','Capybara.javascript_driver =:webkit'和'config.include Capybara :: DSL'到你的'spec_helper.rb' – fabersky
只需在問題 – user3809888
上加上我的'spec_helper.rb'你可以嘗試刪除'config.block_unknown_urls'嗎? – fabersky