ruby-on-rails - test - rspec rails
Redirección de prueba con RSpec y Capybara(Rails) (4)
Acabo de enterarme de lo genial que es RSpec y Cabybara, y ahora estoy trabajando para aprender a escribir pruebas reales.
Estoy tratando de verificar si después de hacer clic en un enlace, hay una redirección a una página específica. A continuación está el escenario
1) I have a page /projects/list - I have an anchor with html "Back" and it links to /projects/show Below is the test i wrote in rspec describe "Sample" do describe "GET /projects/list" do it "sample test" do visit "/projects/list" click_link "Back" assert_redirected_to "/projects/show" end end end
La prueba falla con un mensaje de falla como a continuación
Failure/Error: assert_redirected_to "/projects/show" ArgumentError: @request must be an ActionDispatch::Request
Por favor sugiérame cómo debo probar la redirección y qué estoy haciendo mal?
De la wiki de Devise :
En Rails, cuando una aplicación de rack redirige (al igual que Warden / Devise lo redirecciona a la página de inicio de sesión), la sesión de integración no actualiza correctamente la respuesta. Como consecuencia, el ayudante assert_redirected_to no funcionará.
También esta página tiene la misma información: Rspec asegúrese de que terminemos en el camino correcto
Por lo tanto, tendrá que probar que ahora está en esa URL, en lugar de probar que lo están redirigiendo.
Necesitas usar la ruta, algo como:
assert_redirected_to projects_path
más bien que
assert_redirected_to "/projects/show"
No estoy seguro de que esto pueda ser lo que necesita, pero en mis pruebas prefiero ese enfoque:
...
subject { page }
...
before do
visit some_path_path
# do anything else you need to be redirected
end
it "should redirect to some other page" do
expect(page.current_path).to eq some_other_page_path
end
Prueba current_path.should == "/projects/show"
Capybara también implementa un método current_url
para la URL completamente calificada.
Más información en los docs .