2012-06-27 15 views
31

Acabo de enterarme de lo guay que es RSpec y Cabybara, y ahora estoy trabajando para aprender a escribir pruebas reales.Redirección de prueba con RSpec y Capybara (Rails)

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 se muestra 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 error como a continuación

 
    Failure/Error: assert_redirected_to "/projects/show" 
    ArgumentError: 
     @request must be an ActionDispatch::Request 

Por favor, me sugieren sobre la forma que debería probar la redirección y qué estoy haciendo mal?

Respuesta

68

Trate current_path.should == "/projects/show"

Carpincho también implementa un método current_url para la dirección URL completa.

Más información en el docs.

+3

podría ser mejor usar' projects_path'? Y tal vez utilices la notación 'expect' mientras estás en ello – SuckerForMayhem

-2

Es necesario utilizar la ruta, algo así como:

assert_redirected_to projects_path 

en lugar de

assert_redirected_to "/projects/show" 
+0

Cuando uso como 'assert_redirected_to projects_path' se muestra como' indefinido variable local o método 'projects_path' para # ' – balanv

+0

necesita projects_show_path, en este caso –

4

Desde el Devise wiki:

En Rails cuando un redirecciones aplicación Rack (al igual Warden/Devise lo redirige 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 make sure we ended up at correct path

por lo que tendrá que probar que eres ahora en esa URL, en lugar de prueba que está siendo redirigido a la misma.

10

No estoy seguro de que esto puede ser lo que necesita, pero en mis pruebas me prefiere este 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 
+0

' page.current_path' es innecesario, puedes usar '' '' '' '' '' '' '' '' ya que has declarado '' página como tema – mitra

Cuestiones relacionadas