Почему Capybara отбрасывает мою сессию после одного события?

Тестирование приложения rails, которое имеет before_filter :authenticate_user! для большинства контроллеров, я не могу заставить Capybara сохранить сеанс.

У меня Capybara настроен с использованием PhantomJS с полтергейстом.

Я использую следующий помощник:

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

Когда я запускаю тест, как показано здесь, он пройдет. Однако, если я вызываю click_link на то, что выполняет действия AJAX, или если я просто попытаюсь сделать visit '/tasks' дважды, утверждение should не будет выполнено, потому что я перенаправляюсь на страницу входа в приложение.

Я пробовал несколько разных подходов, включая настройку Capybara:: Session, но я все еще получаю 401 код в AJAX-запросах, и я могу только успешно посетить один раз за спецификацию.

Что я делаю неправильно?

Ответы

Ответ 1

Таким образом, проблема заключалась в том, что драйвер phantomjs (poltergeist) использовал разделенное соединение с базой данных. Раньше у меня была такая же проблема, и я получил решение из railscast episode 391 с кодом в spec/support/shared_db_connection.rb

Так как я не могу найти лицензию на его код, поэтому я просто свяжусь с здесь