测试大多数控制器都有before_filter :authenticate_user!
的rails应用程序,我无法让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
我有以下规范文件:
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'
两次,should
断言将失败,因为我将被重定向到登录该应用页面。
我尝试了一些不同的方法,包括设置Capybara::Session,但我仍然可以获得AJAX请求的401代码,而且我只能按规格成功访问一次。
我做错了什么?
答案 0 :(得分:24)
所以问题是phantomjs驱动程序(poltergeist
)正在使用分离的数据库连接。之前我遇到了完全相同的问题,我从railscast episode 391获得了spec/support/shared_db_connection.rb
由于我找不到他的代码的许可证,所以我只链接到code here