5

関数をスパイし、関数の完了/最初の呼び出し時にコールバックを実行したい。

以下は少し単純化されていますが、達成する必要があることを示しています。

//send a spy to report on the soviet.GoldenEye method function
var james_bond = sinon.spy(soviet, "GoldenEye");
//tell M about the superWeapon getting fired via satellite phone
james_bond.callAfterExecution({
    console.log("The function got called! Evacuate London!");
    console.log(test.args);
});

Sinonでこれを行うことは可能ですか?私の問題を解決する場合は、代替ライブラリも歓迎します:)

4

2 に答える 2

4

不格好ですが、次のことができます。

//send a spy to report on the soviet.GoldenEye method function
var originalGoldenEye = soviet.GoldenEye;

var james_bond = sinon.stub(soviet, "GoldenEye", function () {
  var result = originalGoldenEye.apply(soviet, arguments);

  //tell M about the superWeapon getting fired via satellite phone
  console.log("The function got called! Evacuate London!");
  console.log(arguments);
  return result;
});
于 2014-01-31T21:51:06.880 に答える
3

関数をスタブする必要があります。ドキュメントから:

stub.callsArg(index);

スタブが、提供されたインデックスで引数をコールバック関数として呼び出すようにします。stub.callsArg(0); スタブが最初の引数をコールバックとして呼び出すようにします。

var a = {
  b: function (callback){
    callback();
    console.log('test')
  }
}

sinon.stub(a, 'b').callsArg(0)
var callback = sinon.spy()
a.b(callback)

expect(callback).toHaveBeenCalled()
//note that nothing was logged into the console, as the function was stubbed
于 2013-03-26T06:22:18.230 に答える