为什么Capybara在一次活动后丢弃我的会话?

测试具有before_filter :authenticate_user!的rails应用程序before_filter :authenticate_user! 对于大多数控制器,我无法让Capybara保留会话。

我使用PhantomJS与恶作剧者配置了Capybara。

我使用以下帮助器:

 require 'spec_helper' include Warden::Test::Helpers module FeatureHelpers def login(user = FactoryGirl.create(:default_user)) login_as user, scope: :user user end end 

我有以下spec文件:

 require 'spec_helper' include Warden::Test::Helpers feature 'Leads Data Tasks View' do before(:each) do @user = login end after{ Warden.test_reset! } context "clicking a task button" do scenario "login persists across multuple actions", js: true do visit '/tasks' page.should have_selector('#parse', count: 1) end end end 

当我按照此处显示的那样运行测试时,它将通过。 但是,如果我在执行AJAX操作的某个东西上调用click_link ,或者我只是尝试两次visit '/tasks' ,那么断言将失败,因为我将被重定向到应用程序的登录页面。

我尝试了一些不同的方法,包括设置Capybara :: Session ,但我仍然可以获得AJAX请求的401代码,我只能按规格成功访问一次。

我究竟做错了什么?

所以问题是phantomjs驱动程序( poltergeist )使用的是分离的数据库连接。 之前我遇到了完全相同的问题,我从railscast第391页获得了一个解决方案, 其中包含spec/support/shared_db_connection.rb的代码

由于我找不到他的代码的许可证,所以我将在这里链接到代码