javascript - 诗农 spy 功能不起作用

标签 javascript node.js unit-testing sinon spy

根据sinon.js的文档,我可以这样做:var sp = 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);
}

最佳答案

Sinon 包装了调用,但它并不修补所有引用。返回值是一个包装函数,您可以对其进行断言。它记录对其进行的所有调用,而不是它包装的函数。修改 foo 以便调用者提供一个允许 spy 注入(inject)的函数,并允许对 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);
}

关于javascript - 诗农 spy 功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38162229/

相关文章:

node.js - 找不到绑定(bind).gyp(cwd :\node_modules\appium\node_modules\heapdump) while trying to load binding. gyp

java - java.lang.NoClassDefFoundError : Could not initialize class java test step definition class

javascript使 falsey 函数参数成为标准值

javascript - HTML+JavaScript 用于 Web 应用程序的局限性和 future

javascript - 云标签在固定宽度的div中排序和定位

node.js - koa 路由中的 yield

javascript - Puppeteer:遍历 URL 并等待按顺序打印?

unit-testing - F# 中的单元测试私有(private)方法

javascript - `screen` 带来什么值(value)?

javascript - 比较 JQuery 中给定时间段之间的当前时间