Каков ожидаемый синтаксис для проверки сообщений об исключениях в MiniTest's assert_raises
/ must_raise
?
Я пытаюсь заявить примерно следующее, где "Foo"
находится ожидаемое сообщение об ошибке:
proc { bar.do_it }.must_raise RuntimeError.new("Foo")
Ответы:
Вы можете использовать
assert_raises
утверждение или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
Если вам нужно что-то протестировать на объекте ошибки, вы можете получить это из утверждения или ожидания следующим образом:
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
источник
Minitest::Spec
а не используетеMinitest::Test
. Spec DSL, включая ожидания, доступны только при использованииMinitest::Spec
.Чтобы заявить исключение:
assert_raises FooError do bar.do_it end
Чтобы подтвердить сообщение об исключении:
Согласно документу API ,
assert_raises
возвращает соответствующее исключение, чтобы вы могли проверить сообщение, атрибуты и т. Д.exception = assert_raises FooError do bar.do_it end assert_equal('Foo', exception.message)
источник
Minitest (пока) не предоставляет вам способ проверить фактическое сообщение об исключении. Но вы можете добавить вспомогательный метод, который делает это, и расширить
ActiveSupport::TestCase
класс для использования повсюду в вашем наборе тестов rails, например: в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
и используйте его в своих тестах, например:
assert_raises_with_message RuntimeError, 'Foo' do code_that_raises_RuntimeError_with_Foo_message end
источник
must_raise
потому что он дает вам экземпляр ошибки, чтобы вы могли проверить сообщение самостоятельно.must_raise
раньше.Чтобы добавить некоторые более свежие разработки, в прошлом были некоторые дискуссии о добавлении
assert_raises_with_message
в minitest, но без особого успеха.В настоящее время существует многообещающий запрос на перенос, ожидающий объединения. Если и когда он будет объединен, мы сможем использовать его,
assert_raises_with_message
не определяя его самостоятельно.Между тем существует удобная маленькая жемчужина под названием minitest-Bonus-assertions, которая определяет именно этот метод, а также несколько других, так что вы можете использовать его прямо из коробки. Дополнительную информацию см. В документации .
источник