Quelle est la syntaxe attendue pour vérifier les messages d’exception dans assert_raises / must_raise de MiniTest?

Quelle est la syntaxe attendue pour vérifier les messages d’exception dans assert_raises / must_raise ?

J’essaie de faire une affirmation comme suit, où "Foo" est le message d’erreur attendu:

 proc { bar.do_it }.must_raise RuntimeError.new("Foo") 

Vous pouvez utiliser l’assertion assert_raises ou l’attente must_raise .

 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 

Si vous devez tester quelque chose sur l’object d’erreur, vous pouvez l’obtenir à partir de l’assertion ou de l’attente comme suit:

 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 

Pour affirmer une exception:

 assert_raises FooError do bar.do_it end 

Pour affirmer un message d’exception:

Conformément à la documentation de l’API , assert_raises renvoie l’exception correspondant à ce que vous pouvez vérifier le message, les atsortingbuts, etc.

 exception = assert_raises FooError do bar.do_it end assert_equal('Foo', exception.message) 

Minitest ne vous fournit pas (encore) de moyen de vérifier le message d’exception réel. Mais vous pouvez append une méthode d’aide qui le fait et étendre la classe ActiveSupport::TestCase à utiliser partout dans la suite de tests de rails, par exemple: dans test_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 

et l’utiliser dans vos tests comme:

 assert_raises_with_message RuntimeError, 'Foo' do code_that_raises_RuntimeError_with_Foo_message end 

Pour append quelques développements plus récents, il y a eu des discussions sur l’ajout de assert_raises_with_message à minitest dans le passé sans beaucoup de chance.

Actuellement, il existe une demande d’émission prometteuse en attente de fusion. Si et quand il est fusionné, nous pourrons utiliser assert_raises_with_message sans avoir à le définir nous-mêmes.

En attendant, il y a ce petit bijou pratique nommé minitest-bonus-assertions qui définit exactement cette méthode, avec quelques autres, de sorte que vous puissiez l’utiliser en dehors de la boîte. Consultez les documents pour plus d’informations.