MiniTestの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
例外をアサートするには:
assert_raises FooError do
bar.do_it
end
例外メッセージをアサートするには:
API doc 、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
さらに最近の開発を追加するために、過去にミニテストにassert_raises_with_message
を追加することについて、多くの幸運なしに いくつかの議論 がありました。
現在、 有望なプルリクエスト がマージされるのを待っています。統合された場合、assert_raises_with_message
を自分で定義することなく使用できます。
その間、 minitest-bonus-assertions という名前のこの便利な小さな宝石があります。これは、他のいくつかと一緒にそのメソッドを正確に定義し、すぐに使用できるようにします。詳細については、 docs を参照してください。