特定のエラーをスローするモデルの1つで関数をテストしたいと思います。関数は次のようになります。
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
次に、これらの各例外を発生させるパラメーターを指定してこの関数を呼び出すと、実際に例外がスローされることをアサートしたいと思います。 ActiveSupportのドキュメントを見ていましたが、有望なものは見つかりませんでした。何か案は?
したがって、単体テストは実際にはアクティブにサポートされていません。 Rubyには標準ライブラリの標準的なxunitフレームワーク(Ruby 1.8.xのTest :: Unit、Ruby 1.9のMiniTest)が付属しており、activesupportの要素はいくつかの要素を追加するだけです。それ。
Test :: Unit/MiniTestを使用している場合
assert_raise(Exception) { whatever.merge }
rspecを使用している場合(残念ながら不十分に文書化されていますが、はるかに人気があります)
lambda { whatever.merge }.should raise_error
あなたがしたい場合check発生したException
:
exception = assert_raises(Exception) { whatever.merge }
assert_equal( "message", exception.message )
例外が発生しない(または正常に処理される)ことを確認するには、テストケース内で行います。
assert_nothing_raised RuntimeError do
whatever.merge
end
エラーが発生したことを確認するには、テストケース内で次のようにします。
assert_raise RuntimeError do
whatever.merge
end
頭を上げてください、whatever.merge
は、エラーを発生させるコードです(または、アサーションタイプによっては発生しません)。