spi*_*ton 49 assert ruby-on-rails raise activesupport
我想在我的一个模型上测试一个抛出特定错误的函数.该函数看起来像这样:
def merge(release_to_delete)
raise "Can't merge a release with itself!" if( self.id == release_to_delete.id )
raise "Can only merge releases by the same artist" if( self.artist != release_to_delete.artist )
#actual merge code here
end
Run Code Online (Sandbox Code Playgroud)
现在我想做一个断言,当我用一个导致每个异常的参数调用这个函数时,实际上会抛出异常.我正在查看ActiveSupport文档,但我没有找到任何有希望的东西.有任何想法吗?
Mat*_*ggs 102
所以单元测试并不是真正的主动支持.Ruby在标准库中有一个典型的xunit框架(ruby 1.8.x中的Test :: Unit,ruby 1.9中的MiniTest),而activesupport中的东西只是添加了一些东西.
如果您使用的是Test :: Unit/MiniTest
assert_raise(Exception) { whatever.merge }
Run Code Online (Sandbox Code Playgroud)
如果你正在使用rspec(遗憾的是记录不清,但更受欢迎)
lambda { whatever.merge }.should raise_error
Run Code Online (Sandbox Code Playgroud)
如果你想检查凸起Exception:
exception = assert_raises(Exception) { whatever.merge }
assert_equal( "message", exception.message )
Run Code Online (Sandbox Code Playgroud)
shi*_*vam 16
为确保不会引发(或成功处理)异常,请在测试用例中进行:
assert_nothing_raised RuntimeError do
whatever.merge
end
Run Code Online (Sandbox Code Playgroud)
要检查是否引发了错误,请在测试用例中进行:
assert_raise RuntimeError do
whatever.merge
end
Run Code Online (Sandbox Code Playgroud)
只是抬头,whatever.merge是引发错误的代码(或者不是,取决于断言类型).