web-dev-qa-db-ja.com

Sinonを使用する場合、スタブインスタンスのスタブ関数を置き換える方法は?

var a = sinon.createStubInstance(MyContructor)でインスタンスを作成した場合。

var stub = sinon.stub(object, "method", func);のようなスタブ関数の1つをどのように置き換えることができますか?.

私がこれをしている主な理由は、 これが言及された として複数のコールバックの回避策を達成したいです

15
StevenR

これはあまり意味がないと思います。なぜなら、スタブを別のスタブで置き換える場合は、最初のスタブを使用して、2番目のスタブでやりたいことをすべて実現しないのはなぜですか。

とにかく、sinon.stub(object, "method", func)はドキュメントに従って次のことを行います:

_object.method_を、スパイに包まれたfuncに置き換えます。いつものように、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();
_
15
g00glen00b

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)メソッドがあり、事後にスタブによって呼び出されている関数をオーバーライドすると、より便利になります。

11
flungo

a.methodを上書きする必要はありません。代わりに、a.methodcallsFakeを直接使用できます。

const a = sinon.createStubInstance(MyContructor);
a.method.callsFake(func);
1
Jan Molak

2.0からメソッドをスタブするもう1つの方法+

sinon.stub(object, "method").callsFake(func);

object.method.restore()
0
Srini