ruby on rails - rails - ¿Por qué Capybara está descartando mi sesión después de un evento?
capybara test rails (1)
Entonces, el problema era que el controlador phantomjs ( poltergeist
) estaba usando una conexión de base de datos separada. Tenía exactamente el mismo problema antes y obtuve una solución del railscasts.com/episodes/391-testing-javascript-with-phantomjs de railscasts.com/episodes/391-testing-javascript-with-phantomjs con el código en spec/support/shared_db_connection.rb
Ya que no puedo encontrar la licencia para su código, solo voy a vincularlo aquí.
Probando una aplicación de rieles que tiene before_filter :authenticate_user!
Para la mayoría de los controladores, no puedo hacer que Capybara conserve una sesión.
He configurado Capybara utilizando PhantomJS con poltergeist.
Yo uso el siguiente ayudante:
require ''spec_helper''
include Warden::Test::Helpers
module FeatureHelpers
def login(user = FactoryGirl.create(:default_user))
login_as user, scope: :user
user
end
end
Tengo el siguiente archivo de especificaciones:
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
Cuando ejecute la prueba como se muestra aquí, pasará. Sin embargo, si invoco un click_link
en algo que realiza acciones AJAX, o si simplemente trato de visit ''/tasks''
dos veces, la afirmación should
fallar porque me redireccionarán a la página de inicio de sesión de la aplicación.
He intentado algunos enfoques diferentes, incluida la configuración de Capybara::Session , pero todavía obtengo 401 códigos en las solicitudes AJAX y solo puedo visitar con éxito una vez por especificación.
¿Qué estoy haciendo mal?