Estoy queriendo probar una función en uno de mis modelos que arroja errores específicos. La función es como la siguiente:Rails ActiveSupport: ¿Cómo afirmar que se ha producido un error?
def merge(release_to_delete)
raise "Can't merge a release with itself!" if(self.id == release_to_delete.id)
raise "Can only merge releases by the same artist" if(self.artist != release_to_delete.artist )
#actual merge code here
end
Ahora quiero hacer una aserción de que cuando llamo a esta función con un parámetro que hace que cada una de esas excepciones, que las excepciones en realidad son arrojados. Estaba mirando la documentación de ActiveSupport, pero no encontré nada prometedor. ¿Algunas ideas?
Gracias! Tuve que usar "RuntimeError" en lugar de excepción, así: assert_raise (RuntimeError) {artist1.merge (artist1)} Esta guía fue extremadamente útil: http://guides.rubyonrails.org/testing.html – spilliton
@spilliton: Eso es porque el intérprete de Ruby trata el código anterior como 'assert_raise (Exception() {whatever.merge})', es decir, busca un método llamado 'Exception' que se llama con el bloque dado. Agregar los paréntesis resuelve esa ambigüedad. (Ya se ha corregido la respuesta) –
En rspec 3, use 'expect {whatever.merge} .to raise_error' (http://www.relishapp.com/rspec/rspec-expectations/v/3-1/docs/build- in-matchers/raise-error-matcher) –