tests test run rails how describe ruby-on-rails ruby unit-testing rspec

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