2013-05-15 14 views
8

特定のパラメータ値が指定されている場合にのみモカを使用してメソッドをスタブし、他の値が指定されている場合は元のメソッドを呼び出します。モカ:他のパラメータではなく特定のパラメータを持つスタブメソッド

私はこのようにそれを行うと:

MyClass.any_instance.stubs(:show?).with(:wanne_show).returns(true) 

私は'with'-コールなしでモックを書くとき、私はすべてのパラメータをスタブできることを、私も知っている

unexpected invocation for MyClass.show?(:other_value) 

を取得し、私の特定のモックを与えてください。しかし、その後、私はすべての呼び出しの戻り値を知る必要がありますが、そうではありません:/

tldr;元のメソッドをスタブで呼び出す方法や、特定のパラメータだけをスタブして残りのメソッドを残す方法はありますか?

答えて

1

答えは正確に何をテストしているかによって異なります。

いくつかの注意事項:

1)私はいつもstubs.any_instanceを使用しないでください。あなたはあなたのスタブ/モックで特定することができ、誤ったテストのポジティブを防ぎます。

2)私は、何かが呼び出されたことを積極的に主張するために、スパイをスタブと共に使用することをお勧めします。この目的のためにbourne宝石を使用します。代わりに何かが呼び出されているかどうかを暗黙的にテストするモックを使用することです(例えば、にコールされないと失敗する)

あなたのクラスメソッドは次のようになります構文):

require 'bourne' 
require 'mocha' 

it 'calls MyClass.show?(method_params)' do 
    MyClass.stubs(:show?) 

    AnotherClass.method_which_calls_my_class 

    expect(MyClass).to have_received(:show?).with('parameter!') 
end 

class AnotherClass 
    def self.method_which_calls_my_class 
    MyClass.show?('parameter!') 
    end 
end 

スタブ/スパイ例の多くhereがあり、このことができます

希望

+0

あなたはしかし、 'any_instance'を使用しないようにする方法を示していなかった私の経験では、これは。。。 additiが必要です同じまたはより多くのエラーが発生し脆い可能性があります。 – gtd

関連する問題