Sinon间谍的功能不起作用

时间:2016-07-02 16:28:32

标签: javascript node.js unit-testing sinon spy

根据sinon.js的文档,我可以这样做:var spy = sinon.spy(myFunc);,但它不起作用。这是我的努力:

var sinon = require("sinon");

describe('check bar calling', function(){
  it('should call bar once', function() {
    var barSpy = sinon.spy(bar);

    foo("aaa");

    barSpy.restore();
    sinon.assert.calledOnce(barSpy);
  });
});

function foo(arg) {
  console.log("Hello from foo " + arg);
  bar(arg);
}

function bar(arg) {
  console.log("Hellof from bar " + arg);
}

1 个答案:

答案 0 :(得分:2)

Sinon包含调用它不会修补所有引用。返回值是一个包装函数,您可以在其上进行断言。它记录所有调用它,而不是它包装的函数。修改foo以便调用者提供一个函数允许注入spy,并允许在间谍上进行调用。

var sinon = require("sinon");

describe('check bar calling', function(){
  it('should call bar once', function() {
    var barSpy = sinon.spy(bar);

    foo("aaa", barSpy);

    barSpy.restore();
    sinon.assert.calledOnce(barSpy);
  });
});

function foo(arg, barFn) {
  console.log("Hello from foo " + arg);
  barFn(arg);
}

function bar(arg) {
  console.log("Hellof from bar " + arg);
}