ruby on rails - test - Prueba del controlador RSpec-blank response.body
ruby on rails selenium (4)
De forma predeterminada, la configuración RSpec-rails desactiva la representación de plantillas para las especificaciones del controlador
Una de las formas de solucionar esto es asegurándose de habilitar la configuración 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 use la declaración render_views de un grupo individual:
describe User do
render_views
end
Puedes leer más sobre esto here .
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.
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 las versiones, Rails 2.1.0, RSpec 1.2.7.
De forma predeterminada, rspec-rails piratea en Rails para evitar que realmente represente plantillas de vista. Solo debe probar el comportamiento de sus acciones y filtrar 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 hacer que sus especificaciones de controlador rindan plantillas como lo haría normalmente la aplicación, use la directiva render_views
:
describe YourController do
render_views
...
end
Mientras 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 control equivalente a:
flash[:alert].should == "Invalid email or password"
Para mí, este último parece un poco más flexible, ya que se ejecutará de cualquier manera, pero puede no ser apropiado en todos los casos.
Aclamaciones,
John
RSpec 2+: si desea consultar la URL de extremo a extremo en el cuerpo de respuesta, use una especificación de solicitud en lugar de una especificación de controlador .