var a = sinon.createStubInstance(MyContructor)
でインスタンスを作成した場合。
var stub = sinon.stub(object, "method", func);
のようなスタブ関数の1つをどのように置き換えることができますか?.
私がこれをしている主な理由は、 これが言及された として複数のコールバックの回避策を達成したいです
これはあまり意味がないと思います。なぜなら、スタブを別のスタブで置き換える場合は、最初のスタブを使用して、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();
_
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)
メソッドがあり、事後にスタブによって呼び出されている関数をオーバーライドすると、より便利になります。
a.method
を上書きする必要はありません。代わりに、a.method
でcallsFake
を直接使用できます。
const a = sinon.createStubInstance(MyContructor);
a.method.callsFake(func);
2.0からメソッドをスタブするもう1つの方法+
sinon.stub(object, "method").callsFake(func);
object.method.restore()