Prueba del controlador RSpec - respuesta en blanco.cuerpo

103

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

Otras expectativas sobre el objeto de respuesta, como response.should render_template('index')pasar sin problemas.

¿Alguno de ustedes ha tenido este problema antes? ¿Quizás la respuesta html se pueda obtener de alguna otra manera?

En cuanto a versiones, Rails 2.1.0, RSpec 1.2.7.

Toms Mikoss
fuente

Respuestas:

194

De forma predeterminada, rspec-rails piratea Rails para evitar que realmente represente plantillas de vista. Solo debe probar el comportamiento de sus acciones y filtros de 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 que las especificaciones de su controlador representen las plantillas como lo haría normalmente la aplicación, use la render_viewsdirectiva:

describe YourController do
  render_views
  ...
end
mislav
fuente
2
Gracias, exactamente lo que necesitaba.
Toms Mikoss
2
He trabajado con Rails durante años y ahora finalmente entiendo la diferencia entre las especificaciones del controlador y las solicitudes. ¡Gracias!
Brian Underwood
2

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

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

podría ser una comprobación equivalente a:

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

Para mí, este último parece un poco más flexible, ya que funcionará de cualquier manera, pero puede que no sea apropiado en todos los casos.

Salud,

Juan

John Lockwood
fuente
2

De forma predeterminada, la configuración RSpec-rails deshabilita la representación de plantillas para las especificaciones del controlador

Una de las formas de solucionar este problema es asegurándose de habilitar la render_viewsconfiguración en su rails_helper.rbarchivo. De esta forma, lo haces capaz de funcionar globalmente en todas tus pruebas.

RSpec.configure do |config|
  config.render_views
end

O use la declaración render_views en un grupo individual:

describe User do
  render_views
end

Puedes leer más sobre esto aquí .

Nesha Zoric
fuente