ruby on rails - tests - ¿Cómo probar el aumento de excepciones en Rails/RSpec?
rspec rails tutorial (3)
Hay el siguiente código:
def index
@car_types = car_brand.car_types
end
def car_brand
CarBrand.find(params[:car_brand_id])
rescue ActiveRecord::RecordNotFound
raise Errors::CarBrandNotFound.new
end
Quiero probarlo a través de RSpec. Mi código es:
it ''raises CarBrandNotFound exception'' do
get :index, car_brand_id: 0
expect(response).to raise_error(Errors::CarBrandNotFound)
end
CarBrand con id igual a 0 no existe, por lo tanto, el código de mi controlador genera Errores :: CarBrandNotFound, pero mi código de prueba me dice que no se generó nada. ¿Cómo puedo arreglarlo? ¿En qué me equivoco?
Para poder especificar el manejo de errores, sus expectativas deben establecerse en un bloque; evaluar un objeto no puede generar un error.
Así que quieres hacer algo como esto:
expect {
get :index, car_brand_id: 0
}.to raise_error(Errors::CarBrandNotFound)
Ver Esperar error para más detalles.
Sin embargo, estoy un poco sorprendido de que no obtengas ninguna excepción en los resultados de tus especificaciones.
Use expect{}
lugar de expect()
.
get :index
nunca generará una excepción; más bien establecerá que la respuesta sea un error 500 de alguna manera como lo haría un servidor real.
En su lugar, intente:
it ''raises CarBrandNotFound exception'' do
controller.params[:car_brand_id] = 0
expect{ controller.car_brand }.to raise_error(Errors::CarBrandNotFound)
end