2009-06-30 8 views
88

Tengo un problema al probar mis controladores con RSpec - la llamada a response.body siempre devuelve una cadena vacía. En el navegador todo se procesa correctamente, y las pruebas de características de pepino parecen hacerlo bien, pero RSpec falla todas y cada una de las veces.Prueba de controlador RSpec - blanco response.body

Otras expectativas en el objeto de respuesta, como response.should render_template('index') pasan sin ningún problema.

¿Alguno de ustedes ha encontrado este problema antes? Tal vez la respuesta html se puede obtener de alguna otra manera?

En cuanto a versiones, Rails 2.1.0, RSpec 1.2.7.

Respuesta

166

De forma predeterminada, rspec-rails piratea en Rails a para evitar que lo represente. Solo debe probar el comportamiento de sus acciones. & filtra las pruebas de su controlador, no el resultado de la representación de la plantilla; para eso están las especificaciones de vista.

Sin embargo, si desea realizar las especificaciones de su controlador plantillas de renderización como la aplicación normalmente, utilice el render_views Directiva:

describe YourController do 
    render_views 
    ... 
end 
+2

Gracias, exactamente lo que necesitaba. –

+1

He estado trabajando con Rails durante años y ahora finalmente entiendo la diferencia entre el controlador y las especificaciones de solicitud. ¡Gracias! –

2

A medida que trabajaba con un problema similar (que me llevó a esta pregunta), se me ocurrió que hay diferentes maneras de desollar al mismo gato. En otras palabras, en lugar de verificar el texto del cuerpo, es posible que pueda verificar el contenido del flash.

response.body.should =~ /Invalid email or password/ 

podría ser un cheque equivalente a:

flash[:alert].should == "Invalid email or password" 

Para mí éste parece un poco más flexible, ya que se ejecutará en cualquier caso, pero puede no ser apropiado en todos los casos.

Saludos,

John

0

Por defecto, la configuración RSpec-carriles desactiva la representación de plantillas para las especificaciones del controlador

Una de las maneras de solucionar esto es asegurándose de que para activar el ajuste render_views en su archivo rails_helper.rb. De esta manera, lo hace capaz de trabajar globalmente en todas sus pruebas.

RSpec.configure do |config| 
    config.render_views 
end 

O utilice declaración render_views un grupo individual:

describe User do 
    render_views 
end 

Usted puede leer más sobre esto here.

Cuestiones relacionadas