2016-08-20 7 views
1

として渡された関数をスタブ:Sinon私は、次の例のクラスを持っているパラメータ

function Example() {...} 
Example.prototype.someFunc1() {...} 
Example.prototype.someFunc2() {...} 
Example.prototype.func(func) {var res = func(); ...} 

私は通常、次のようにExample#func()を呼び出して次のように

var example = new Example(); 
example.func(example.someFunc1) 
// or like this, depending on what I want 
example.func(example.someFunc2) 

を今、私は私のテストでExample#someFunc1()スタブ:

var example = new Example(); 
sinon.stub(example, 'someFunc1').returns(...); 
exmaple.func(example.someFunc1); 

問題は、Example#someFunc1()はbeinではありませんgはこのようにスタブされ、普通に呼ばれます。このような状況で私は何ができますか?

+0

これは再現できません。 https://gist.github.com/davelnewton/a2b786fd485b6767606bcb20942c4616 –

+0

@DaveNewton私は作った:https://jsfiddle.net/f7p7z5fL/ – Jorayen

答えて

1

この例では、関数への参照を保存します。それからあなたはそれをスタブします。

スタブされた関数ではなく、元の関数への参照を渡しています。

あなたがスタブすると、スタブする機能は消えません。–だから、後でrestore()することができます。あなたのいずれかが、後者は実際にテストとして意味をなさない

var fn = sinon.stub(example, 'opt1').returns(42); 
example.logic([3, 2], fn); 

、例えば、

sinon.stub(example, 'opt1').returns(42); 
example.logic([3, 2], example.opt1); 

またはスタブへの参照を渡す、例えば、のは、自分自身を関数オブジェクトへの参照を渡す必要がありますしかし、任意の関数を渡すことができます。何かスタブする理由はありません。

FWIWでは、あなたのフィドルは、あなたが投稿した元のコードと同等のものではありません。


それはあなたがテストしようとしているものは不明だ:あなたは、これは、例えば、無名関数は大丈夫だろう、それはExampleオブジェクトに添付されますかどうか、古い関数である可能性が関数リファレンス–を渡します。

そのものがスタブされた関数と呼ばれる場合は、スタブが意味を成します。

+0

ちょっと、私はちょうど単体テストしたいと思っていた#logic()とそれを隔離するので、私はそれをスタブした、私はちょうどあなたのように任意のスタブを渡している必要があります..ありがとう:) – Jorayen

関連する問題