test rails ruby-on-rails rspec capybara

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 .