私は、スタブメソッドの最初と2番目の呼び出しで異なる関数を呼び出す方法を探しています。
次に例を示します。
var func1 = function(connectionPolicy, requestOptions, callback) {
callback({ code: 403 });
}
var func2 = function (connectionPolicy, requestOptions, callback) {
callback(undefined);
}
var stub = sinon.stub();
// Something of this form
stub.onCall(0) = func1;
stub.onCall(1) = func2;
request.createRequestObjectStub = stub;
したがって、内部でrequest.createrequestObjectStubが呼び出されると(パブリックAPIを呼び出す場合)、この動作が発生します。
よろしく、ラジェッシュ
•Sinonバージョン:1.17.4•環境:Node JS
(onCall(index)
と匿名スタブを使用して)希望することを実行する唯一の方法は、bind
JS関数を使用することです。
これは:
_stub.onCall(0).returns(func1.bind()());
stub.onCall(1).returns(func2.bind()());
_
stub.onCall(0).returns(func1());
を使用する場合、onCallを定義するときに関数_func1
_が実行されるため、_.bind
_が必要です。
とにかく、.onCall(index).returns(anObject);
を使用して直接値を返す、またはスタブメソッドが呼び出されるたびにインクリメントされるカウンターを定義するなど、他のオプションがあります(これにより、どのn-callであるかがわかり、返すことができます異なる値)。
これら3つのアプローチについては、次のフィドルと例を見ることができます。 https://jsfiddle.net/elbecita/jhvvvh1
Sinon.stub()のcallsArg
およびcallsArgWith
を使用して、sinonにコールバックを呼び出させることができます。
スタブに、指定されたインデックスの引数をコールバック関数として呼び出します。 stub.callsArg(0);スタブが最初の引数をコールバックとして呼び出すようにします。 ソース
その後、次のようなことができます:
myStub.onCall(0).callsArgWith(0, first);
myStub.onCall(1).callsArgWith(0, second);
これは古いスレッドですが、少なくともSinon 1.8以降では、これを解決するより効率的な方法はsinon.onCall(arg)
をcallsFake()
とチェーンすることです。
したがって、ユースケースでは、次のことを実行できます。
var func1 = function(connectionPolicy, requestOptions, callback) {
callback({code: 403});
}
var func2 = function(connectionPolicy, requestOptions, callback) {
callback(undefined);
}
var stub = sinon.stub();
// Solution
stub.onCall(0).callsFake(func1);
stub.onCall(1).callsFake(func2);
request.createRequestObjectStub = stub;
onCallは私のために働いた。私のコードは次のようになります:
const stubFnc = sinon.stub(myObject, "myFunction");
stubFnc.onCall(0).returns(mockObject1);
stubFnc.onCall(1).returns(mockObject2);