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

时间:2017-02-23 00:25:40

标签: javascript unit-testing sinon stub

我想重新保留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
    });
  });
});

1 个答案:

答案 0 :(得分:1)

尝试使用外部变量跟踪调用。第一次调用时,返回第一个值并递增计数器。第二次调用(和所有后续调用),返回第二个值。

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个调用的简单示例,但是如果需要,可以将其展开以处理多个调用。