tutorial tests test run rails how ruby-on-rails ruby rspec

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