再スタブしたいsomeHandler.getStatus
、しかし私はTypeError: Attempted to wrap getStatus which is already wrapped
..
it('is a test', function() {
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: 1
});
});
sandbox.stub(someOtherHandler, 'doSomething', function(callback) {
callback(null);
});
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: 0
});
});
});
Sinonには、同じスタブ化されたメソッドへの複数の呼び出し(stub.onCall(n);)を処理するためのNice APIがあります。
stub api doc の例:
"test should stub method differently on consecutive calls": function () {
var callback = sinon.stub();
callback.onCall(0).returns(1);
callback.onCall(1).returns(2);
callback.returns(3);
callback(); // Returns 1
callback(); // Returns 2
callback(); // All following calls return 3
}
テストでは、このアプローチを広く使用しています。
外部変数を使用して呼び出しを追跡してみてください。最初に呼び出されたときに、最初の値を返し、カウンターをインクリメントします。 2番目の呼び出し(および後続のすべての呼び出し)では、2番目の値を返します。
it('is a test', function() {
let callCount = 0
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: callCount++ == 0 ? 1 : 0
});
});
sandbox.stub(someOtherHandler, 'doSomething', function(callback) {
callback(null);
});
});
これは2つの呼び出しを処理する簡単な例ですが、必要に応じて複数の呼び出しを処理するように拡張します。