2012-04-02 33 views
32

特定の引数だけをスタブする方法はありますか?他の従業員がboss.fire!メソッドに渡された場合、この特定の引数のみのRspecスタブメソッド

boss.stub(:fire!).with(employee1).and_return(true) 

ような何か、私はboss received unexpected messageエラーを取得する、しかし、私が本当に希望することは、特定の引数のメソッドをオーバーライドするだけであり、それは他のすべてのためにも残しておきます。

どのようにこれを行うことができますか?

答えて

51

のようなコードで、独自のスタブメソッドを記述してみてください:

boss.stub(:fire!).and_call_original 
boss.stub(:fire!).with(employee1).and_return(true) 

RSpecの3構文(@ pk-nb)

allow(boss).to receive(:fire!).and_call_original 
allow(boss).to receive(:fire!).with(employee1).and_return(true) 
+0

ありがとう、アンドレイ、私が探していたもの –

+0

スタブにクリーンな方法。ありがとう。 – bragboy

+12

RSpec 3構文と同じこと: 'allow(boss).to receive(:fire!)and_call_original allow(boss).toを受け取る(:fire!)。with(employee1).and_return –

2

あなたが元の実装を呼び出しますfire!メソッドのデフォルトのスタブを追加することができ、この

fire_method = boss.method(:fire!) 
boss.stub!(:fire!) do |employee| 
    if employee == employee1 
    true 
    else 
    fire_method.call(*args) 
    end 
end 
関連する問題