Javascript sinon spy未检测到函数调用

Javascript sinon spy未检测到函数调用,javascript,node.js,sinon,chai,Javascript,Node.js,Sinon,Chai,我正在尝试将sinonJS框架用于nodeJS单元测试。问题是,我根本无法让锡农间谍工作。这是我的代码: const callback = sinon.spy(someModule.callback) mainModule.doSomethingFunction() //someModule.callback function is called inside this function assert(callback.calledOnce, 'callback should be call

我正在尝试将sinonJS框架用于nodeJS单元测试。问题是,我根本无法让锡农间谍工作。这是我的代码:

const callback = sinon.spy(someModule.callback)

mainModule.doSomethingFunction() //someModule.callback function is called inside this function

assert(callback.calledOnce, 'callback should be called once')
它只是在以下方面失败:

AssertionError:应该调用一次回调


但是我正在记录应该调用的函数,它清楚地显示它正在被调用,sinon间谍只是没有检测到它。我想知道怎么了?

要在spy中包装对象方法,可以使用
sinon
如下:

const callback = sinon.spy(someModule, 'callback');
mainModule.doSomethingFunction();
assert(callback.calledOnce, 'callback should be called once');
callback.restore();

请注意,当您打开spy时,应该调用
restore

语句
const callback=sinon.spy(someModule.callback)
创建一个spy,一旦调用了
someModule.callback(顺便说一句,它不是常量),它将调用
someModule.callback
。要替换函数,请使用
someModule.callback=sinon.spy(someModule.callback)

如果问题中包含的是所有测试代码,则不会调用它。我编辑了这个问题:我在应该被监视的回调函数中添加了这个函数。间谍的目的不是为了侦察,而不是利用它做些什么吗?我以为间谍只是间谍,然后我就可以测试它间谍的函数是否被调用了?@VillemiekOja是的,但是你的代码中没有任何东西调用过
回调
。也许它应该作为参数传递给
doSomethingFunction
?它在main module.doSomethingFunction内部调用。在mainModule.doSomethingFunction内部,它调用someModule.callback函数dos not work=/。它只是没有检测到回调,即使我写的和你们写的完全一样,它对我来说在一些节点流的单元测试中工作得很好。这些文件是。如果你不能让它工作,你需要在你的问题中包括一个,因为你的问题包含很少的代码。一个区别是,我们使用ASI和节点。自动插入分号。也许这会影响sinon,因此它不会检测到函数调用?此外,我们使用dirty chai和chai请查看我的与主题相关的新问题:,您可能能够解决它。请查看我的与主题相关的新问题:,您可能能够解决它