4

私はこのような方法を持っています

def className  
  def method_name
    some code  
  rescue  
    some code and error message  
  end  
end

それで、レスキューブロックをテストするためにrspecを書き留める方法..?

4

2 に答える 2

10

レスキューしたい場合は、some code何らかの例外を発生させることを期待していることを意味します。

RSpec スタブを使用して実装を偽造し、エラーを強制することができます。実行ブロックに発生する可能性のあるメソッドが含まれていると仮定します

def method_name
  other_method_that_may_raise
rescue => e
  "ERROR: #{e.message}"
end

スペック内のそのメソッドにスタブをフックします

it " ... " do
  subject.stub(:other_method_that_may_raise) { raise "boom" }
  expect { subject.method_name }.to_not raise_error
end

結果をテストすることでレスキューハンドラーを確認することもできます

it " ... " do
  subject.stub(:other_method_that_may_raise) { raise "boom" }
  expect(subject.method_name).to eq("ERROR: boom")
end

言うまでもなく、一般的なエラーではなく、実際の実装で発生する可能性が高いエラーを発生させる必要があります。

{ raise FooError, "boom" }

Errorこれが関連していると仮定して、それのみをレスキューします。


補足として、Ruby では次のようにクラスを定義します。

class ClassName

いいえ

def className

あなたの例のように。

于 2014-01-08T15:40:33.880 に答える