MiniTestのassert_raises
/で例外メッセージをチェックするために期待される構文は何must_raise
ですか?
次のようなアサーションを作成しようとしてい"Foo"
ます。予想されるエラーメッセージは次のとおりです。
proc { bar.do_it }.must_raise RuntimeError.new("Foo")
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
Minitest::Spec
していて、使用していないことを確認してくださいMinitest::Test
。期待を含むSpecDSLは、を使用している場合にのみ使用できますMinitest::Spec
。
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
あまり運がなくていくつかの議論がありました。
現在、マージされるのを待っている有望なプルリクエストがあります。マージされた場合、assert_raises_with_message
自分で定義しなくても使用できるようになります。
その間、minitest-bonus-assertionsという名前のこの便利な小さな宝石があります。これは、他のいくつかの方法とともに、その方法を正確に定義しているため、箱から出してすぐに使用できます。詳細については、ドキュメントを参照してください。