在MiniTest的assert_raises / must_raise中检查exception消息的期望语法是什么?
在MiniTest的assert_raises
/ must_raise
检查exception消息的期望语法是什么?
我试图做出如下的断言,其中"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
如果你需要在错误对象上testing一些东西,你可以从断言或期望中得到它,例如:
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
断言exception:
assert_raises FooError do bar.do_it end
断言exception信息:
根据API文档 , assert_raises
返回匹配的exception,以便检查消息,属性等。
exception = assert_raises FooError do bar.do_it end assert_equal('Foo', exception.message)
Minitest不提供(你)的方式来检查实际的exception信息。 但是你可以添加一个辅助方法来实现它,并且扩展ActiveSupport::TestCase
类以在你的Railstesting套件中的任何地方使用,例如:in 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
并在你的testing中使用它:
assert_raises_with_message RuntimeError, 'Foo' do code_that_raises_RuntimeError_with_Foo_message end
为了增加一些更新的发展,过去没有太多的运气,已经有一些关于向assert_raises_with_message
添加assert_raises_with_message
讨论 。
目前,还有一个有希望的拉动请求正在等待合并。 如果和合并时,我们将能够使用assert_raises_with_message
而不必自己定义它。
与此同时,这个方便的小gem命名为minitest-bonus-assertions ,它确切地定义了这个方法以及其他一些方法,以便您可以使用它。 有关更多信息,请参阅文档 。