Rails的ActiveSupport:如何断言提出了一个错误?
我想testing我的模型之一,引发特定错误的function。 该函数看起来像这样:
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
现在我想做一个断言,当我调用这个函数的一个参数,导致这些exception,实际上是抛出exception。 我正在查看ActiveSupport文档,但我没有find任何有希望的。 有任何想法吗?
所以unit testing并没有真正的支持。 Ruby在标准库中有一个典型的xunit框架(ruby 1.8.x中的Test :: Unit,Ruby 1.9中的MiniTest),activesupport中的东西只是添加了一些东西。
如果你正在使用Test :: Unit / MiniTest
assert_raises(Exception) { whatever.merge }
如果你使用的是rspec(不幸的是logging不好,但方式更受欢迎)
lambda { whatever.merge }.should raise_error
如果你想检查提出的Exception
:
exception = assert_raises(Exception) { whatever.merge } assert_equal( "message", exception.message )
为了确保不会引发exception(或成功处理),请在您的testing用例中执行以下操作:
assert_nothing_raised RuntimeError do whatever.merge end
要检查是否出现错误,请在您的testing用例中进行:
assert_raise RuntimeError do whatever.merge end
对,就这么简单! 🙂