可以在单个测试中两次存根方法以返回不同的结果吗?

bob*_*e01 12 javascript unit-testing stub sinon

我想重新存根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
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

gor*_*181 27

Sinon有一个很好的API来处理多个调用(stub.onCall(n);)到同一个stubbed方法.

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
}
Run Code Online (Sandbox Code Playgroud)

我们在测试中广泛使用这种方法.