例外がスローされることをチェックする
例外がスローされることをチェックするには、「raise_error」マッチャーを使用します。
- 「proc { <例外が発生する処理> }.should raise_error」のような形式で使用します。
- raise_errorの引数として、期待される例外の型やmessageの値を指定して詳細なチェックを行うことが可能です。
- また、ブロックを指定することで、例外に対する追加のチェックを行うこともできます。
以下は、「raise_error」の利用例です。
describe "test" do it "ex1" do # 「should raise_error」で # procを実行した際に何らかの例外が発生することを確認できる proc { raise "test" }.should raise_error # 例外の型やmessageを評価することも可能。 proc { raise IOError.new( "test" ) }.should raise_error( IOError ) proc { raise IOError.new( "test" ) }.should raise_error( IOError, "test" ) proc { raise IOError.new( "test" ) }.should raise_error( IOError, /t.*/ ) # ブロックを指定することでさらに詳細なチェックも可能 proc { ex = IOError.new( "test" ) class << ex def var; "aaa" end end raise ex }.should raise_error( IOError, "test" ) {|ex| ex.var.should == "aaa" } end end
実行結果です。
$ spec raise_spec.rb . Finished in 0.028 seconds 1 example, 0 failures