¿Cuál es la sintaxis esperada para comprobar los mensajes de excepción en MiniTest assert_raises/ must_raise?
Estoy tratando de hacer una afirmación como la siguiente, donde "Foo"está el mensaje de error esperado:
proc { bar.do_it }.must_raise RuntimeError.new("Foo")

Respuestas:
Puede utilizar la
assert_raisesaserción o lamust_raiseexpectativa.it "must raise" do assert_raises RuntimeError do bar.do_it end -> { bar.do_it }.must_raise RuntimeError lambda { bar.do_it }.must_raise RuntimeError proc { bar.do_it }.must_raise RuntimeError endSi necesita probar algo en el objeto de error, puede obtenerlo de la aserción o expectativa de la siguiente manera:
describe "testing the error object" do it "as an assertion" do err = assert_raises RuntimeError { bar.do_it } assert_match /Foo/, err.message end it "as an exception" do err = ->{ bar.do_it }.must_raise RuntimeError err.message.must_match /Foo/ end endfuente
Minitest::Specy noMinitest::Test. El Spec DSL, incluidas las expectativas, solo está disponible cuando se usaMinitest::Spec.Para hacer valer la excepción:
assert_raises FooError do bar.do_it endPara afirmar un mensaje de excepción:
Según el documento de API ,
assert_raisesdevuelve la excepción coincidente para que pueda verificar el mensaje, los atributos, etc.exception = assert_raises FooError do bar.do_it end assert_equal('Foo', exception.message)fuente
Minitest no le proporciona (todavía) una forma de verificar el mensaje de excepción real. Pero puede agregar un método auxiliar que lo haga y extender la
ActiveSupport::TestCaseclase para usar en todas partes en su suite de prueba de rieles, por ejemplo: entest_helper.rbclass ActiveSupport::TestCase def assert_raises_with_message(exception, msg, &block) block.call rescue exception => e assert_match msg, e.message else raise "Expected to raise #{exception} w/ message #{msg}, none raised" end endy utilícelo en sus pruebas como:
assert_raises_with_message RuntimeError, 'Foo' do code_that_raises_RuntimeError_with_Foo_message endfuente
must_raiseporque le brinda la instancia del error para que pueda verificar el mensaje usted mismo.must_raiseantes.Para agregar algunos desarrollos más recientes, ha habido algunas discusiones sobre cómo agregar
assert_raises_with_messagecómo minitest en el pasado sin mucha suerte.Actualmente, hay una solicitud de extracción prometedora esperando ser fusionada. Si se fusiona y cuando lo haga, podremos usar
assert_raises_with_messagesin tener que definirlo nosotros mismos.Mientras tanto, existe esta pequeña y práctica joya llamada minitest-bonus-assertions que define exactamente ese método, junto con algunos otros, para que pueda usarlo de inmediato. Consulte los documentos para obtener más información.
fuente