Rails ActiveSupport: ¿Cómo afirmar que se genera un error?
Quiero probar una función en uno de mis modelos que arroja errores específicos. La función se ve algo como esto:
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 afirmación de que cuando llamo a esta función con un parámetro que causa cada una de esas excepciones, que las excepciones realmente se arrojan. Estaba buscando documentación de ActiveSupport, pero no encontré nada prometedor. Alguna idea?
2 answers
Así que las pruebas unitarias no están realmente en activesupport. Ruby viene con un framework xunit típico en las libs estándar (Test:: Unit en ruby 1.8.x, MiniTest en ruby 1.9), y las cosas en activesupport solo le agregan algunas cosas.
Si está utilizando Test:: Unit / MiniTest
assert_raises(Exception) { whatever.merge }
Si está utilizando rspec (desafortunadamente mal documentado, pero mucho más popular)
lambda { whatever.merge }.should raise_error
Si quieres marcar el planteado Exception
:
exception = assert_raises(Exception) { whatever.merge }
assert_equal( "message", exception.message )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-09 04:29:04
Para asegurarse de que no se genera ninguna excepción (o se maneja con éxito) haga dentro de su caso de prueba:
assert_nothing_raised RuntimeError do
whatever.merge
end
Para comprobar que el error se plantea hacer dentro de su caso de prueba:
assert_raise RuntimeError do
whatever.merge
end
Solo un heads up, whatever.merge
es el código que genera el error (o no, dependiendo del tipo de aserción).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-26 08:47:32