为什么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
的代码
由于我找不到他的代码的许可证,所以我将在这里链接到代码