1. ホーム
  2. ruby

[解決済み] MiniTestのassert_raises/must_raiseで例外メッセージをチェックするための構文とは?

2023-02-01 19:33:29

質問

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