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

时间:2013-09-04 20:59:01

标签: ruby-on-rails rspec capybara phantomjs poltergeist

测试大多数控制器都有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代码,而且我只能按规格成功访问一次。

我做错了什么?

1 个答案:

答案 0 :(得分:24)

所以问题是phantomjs驱动程序(poltergeist)正在使用分离的数据库连接。之前我遇到了完全相同的问题,我从railscast episode 391获得了spec/support/shared_db_connection.rb

中的代码的解决方案

由于我找不到他的代码的许可证,所以我只链接到code here