2015-10-13 13 views
6

var a = sinon.createStubInstance(MyContructor)でインスタンスを作成している場合。Sinonを使用する場合、スタブインスタンスのスタブ関数を置き換える方法は?

var stub = sinon.stub(object, "method", func);のように、どのようにスタブされた機能の1つを置き換えることができますか。私はこれをやっている

主な理由は、あなたが別のスタブとスタブを交換している場合ので、私は、これは多くの意味を作るんだと思いませんthis mentioned

答えて

4

として、複数のコールバックの回避策を達成したいです。..あなたが2番目のスタブで何をしたいのかを達成するために最初のスタブを使ってみませんか?

とにかく、sinon.stub(object, "method", func)は、ドキュメントに応じて、以下のん:

はスパイに包まれ、funcobject.methodを置き換えます。いつものように、object.method.restore();元の方法を復元するために使用できます。

あなたはスタブインスタンスのスタブ機能を交換したいのであれば、なぜあなたはいたしません。

var a = sinon.createStubInstance(MyConstructor); 
a.method = sinon.spy(function() { return "Foo Bar"; }); 

それとも、スパイの代わりにスタブを作成する場合:

var a = sinon.createStubInstance(MyConstructor); 
a.method = sinon.stub(); 
+0

a.method = sinon.stub()を呼び出す前に、a.method.restore()を呼び出すことが重要です。 – Ajitesh

+1

この回答がアップに投票されたので、正しい軌道に乗りました。これは 'sinon.stub(object、"メソッド、 "fn")と答えられて以来、廃止されました。私たちは今、 'sinon.stub(オブジェクト、 "メソッド")を使用することができますcallsFake(関数(){//ものを行う});'を参照してください[ここ](http://sinonjs.org/releases/v2.3.1/stubs #stubcallsfakefakefunction) _Edit:fixed url_ –

+0

@PhilD。あなたは正しいが、問題自体は 'sinon.stub(オブジェクト、「方法」、FN)'を求めているので、私は、私は答え自体にその情報を含むことはないと思います。 – g00glen00b

7

sinon.createStubInstance(MyConstructor)かを使用して、オブジェクト全体をスタブ後sinon.stub(obj)あなただけのいずれかが(@ g00glen00bによって記載されているように)プロパティに新しいスタブを割り当てるか、再スタブの前にスタブを復元することによってスタブを置き換えることができます。

var a = sinon.createStubInstance(MyConstructor); 
a.method.restore(); 
sinon.stub(object, "method", func); 

この方法の利点は、あなたがまだ予想される動作で、その後a.method.restore()呼び出すことができるということです。

スタブAPIは事実の後にスタブによって呼び出される関数をオーバーライドする.call(func)方法を持っていた場合、それはより便利になります。

関連する問題