2011-05-18 10 views
6

Tengo un user_controller_spec.rb que está fallando, y no estoy seguro de por qué.Ayuda rastreando por qué falla la especificación del controlador

require 'spec_helper' 

describe UsersController do 

    describe "GET 'index'" do 
    it "should be successful" do 
     get 'index' 
     response.should be_success 
    end 
    end 


end 

Cuando corro rspec que dice:

Failures: 

    1) UsersController GET 'index' should be successful 
    Failure/Error: response.should be_success 
     expected success? to return true, got false 
    # ./spec/controllers/users_controller_spec.rb:8 

Finished in 0.17047 seconds 
1 example, 1 failure 

ir al directorio/home/página en el navegador funciona bien.

¿Hay alguna manera de obtener una razón más detallada de por qué está fallando?

Nota:

Ésta es rails3, y estoy usando rspec.

También tengo la joya de capibarta, y al buscar en mi solución, se muestra que la única referencia a capibara está en mi gema y en el archivo gem.lock.

Respuesta

1

Puede ser que no solo represente la página, sino que la redireccione. Para comprobar en qué puede estar equivocado, que yo haría en mi especificación algo como:

response.should == 1 

con el fin de ver cuál es la respuesta real es. Esto te daría una buena pista sobre lo que está sucediendo.

+0

ok funciona ahora gracias (corrigió algo, redireccionaba), pero siempre falla si hago response.should == 1 ¿qué hace? – Blankman

+0

Sí, esta falla a propósito :) Simplemente la usa para verificar cuál es el valor real que obtiene (Dirá algo como se esperaba: éxito, conseguido: redirigir. – Spyros

2

Puede probar la salida del cuerpo de la respuesta para ver cuál es el mensaje. Podría ser cualquier cosa del usuario que inició sesión como no tener los permisos correctos (o visitar una página de forma anónima que debe haber iniciado sesión para ver) a un error de vista extraño en el entorno de prueba.

get 'index' 
puts response.body.inspect 
puts response.status.inspect 
... 
response.should be_success 

response.body contendrá la salida HTML de la respuesta, por lo que debería ser capaz de decir por qué no es un éxito (espero que tenga un seguimiento de pila o ser un redireccionamiento o algo así). También tenga en cuenta redirigir no es "éxito". Si recuerdo correctamente be_success se asegura de que el código de estado HTTP sea uno de los 200, los redireccionamientos son generalmente 302 o 304, por lo que no cuentan. Si se pretende redirigir, intente response.should be_redirect.

+0

buenos consejos, gracias! Por cierto, ¿puede obtener acceso al objeto de solicitud para ver la URL en bruto solicitando, etc.? – Blankman

Cuestiones relacionadas