Qual é a sintaxe esperada para verificar mensagens de exceção no assert_raises
/ do MiniTest must_raise
?
Estou tentando fazer uma afirmação parecida com a seguinte, onde "Foo"
está a mensagem de erro esperada:
proc { bar.do_it }.must_raise RuntimeError.new("Foo")
Respostas:
Você pode usar a
assert_raises
afirmação ou amust_raise
expectativa.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 end
Se você precisar testar algo no objeto de erro, poderá obtê-lo a partir da asserção ou expectativa da seguinte forma:
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 end
fonte
Minitest::Spec
e nãoMinitest::Test
. O Spec DSL, incluindo as expectativas, estão disponíveis apenas durante o usoMinitest::Spec
.Para afirmar a exceção:
assert_raises FooError do bar.do_it end
Para declarar mensagem de exceção:
De acordo com o documento da API ,
assert_raises
retorna a exceção correspondida para que você possa verificar a mensagem, os atributos etc.exception = assert_raises FooError do bar.do_it end assert_equal('Foo', exception.message)
fonte
O Minitest não fornece (ainda) uma maneira de verificar a mensagem de exceção real. Mas você pode adicionar um método auxiliar que faça isso e estenda a
ActiveSupport::TestCase
classe para usar em qualquer lugar em sua suíte de teste do Rails, por exemplo: emtest_helper.rb
class 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 end
e use-o em seus testes como:
assert_raises_with_message RuntimeError, 'Foo' do code_that_raises_RuntimeError_with_Foo_message end
fonte
must_raise
porque fornece a instância do erro para que você mesmo possa verificar a mensagem.must_raise
antes.Para adicionar alguns desenvolvimentos mais recentes, houve algumas discussões sobre adicionar
assert_raises_with_message
ao miniteste no passado, sem muita sorte.Atualmente, há uma solicitação pull promissora aguardando para ser mesclada. Se e quando for mesclado, poderemos usar
assert_raises_with_message
sem ter que defini-lo.Nesse ínterim, existe esta pequena jóia útil chamada minitest-bonus-assertions que define exatamente esse método, junto com alguns outros, para que você possa usá-lo imediatamente. Veja a documentação para mais informações.
fonte