2015-12-01 24 views
1

對於使用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) 
+0

你能分享你的spec_helper嗎?一般來說,我想說你必須下載'qt'庫並安裝gem,然後將'gem'capybara-webkit''添加到你的gem文件中,添加'require'capybara-webkit'','Capybara.javascript_driver =:webkit'和'config.include Capybara :: DSL'到你的'spec_helper.rb' – fabersky

+0

只需在問題 – user3809888

+0

上加上我的'spec_helper.rb'你可以嘗試刪除'config.block_unknown_urls'嗎? – fabersky

回答

1

我想你可能需要他們有一個特定的部分以capybara-webkit處理以及使用Warden::Test::Helpers代替as described here

注意。

0

401可能意味着密碼不匹配您正在使用登錄的電子郵件。由於它使用rack_test而不是capybara-webkit爲你工作,所以很可能你還在使用基於事務的測試。
使用rack_test時,應用程序在與測試相同的線程中運行,這意味着它們都使用相同的數據庫連接。正因爲如此,您可以使用基於事務的測試,並且無需支付實際向數據庫寫入任何內容的性能損失。但是,當使用任何「真正的瀏覽器」驅動程序時,Capybara會在它自己的線程中啓動您的應用程序,這意味着測試和應用程序正在使用單獨的數據庫連接,因此您必須實際提交數據庫。這通常是通過在截斷模式下使用database_cleaner來完成的。見https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example

+0

我只是試過這個。添加數據庫截斷不能解決401錯誤。 – user3809888

+0

你是如何創建記錄的?你改變爲config.use_transactional_fixtures = false?請發佈您的spec_helper和rails_helper –

+0

我剛剛添加了我的'spec_helper.rb'到原始問題。 – user3809888

相關問題