19

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

我使用 PhantomJS 和 poltergeist 配置了 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 操作的某个东西上调用 a click_link,或者我只是尝试执行visit '/tasks'两次,则should断言将失败,因为我将被重定向到应用程序的登录页面。

我尝试了几种不同的方法,包括设置Capybara::Session,但我仍然在 AJAX 请求中收到 401 代码,并且每个规范只能成功访问一次。

我究竟做错了什么?

4

1 回答 1

24

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

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

于 2013-09-17T10:00:49.090 回答