Почему 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
Так как я не могу найти лицензию на его код, поэтому я просто свяжусь с здесь