【发布时间】:2017-02-13 13:16:55
【问题描述】:
在 javascript (ES6) 中,我有一个实用模块,它只包含一些函数,然后在文件末尾,我像这样导出它们:
module.exports = {
someFunction1,
someFunction2,
someFunction3,
}
然后我想为这些函数编写单元测试。一些功能相互依赖;它们以某种方式相互调用,例如,someFunction1 可能调用 someFunction2。没有循环问题。
一切正常,直到我需要监视其中一个函数被调用。我该怎么做?目前我正在使用 Chai 和 Sinon。
在测试文件中,我已将整个文件作为模块导入:
const wholeModule = require('path/to/the/js/file')
最后,我的测试如下所示:
it('should call the someFunction2', (done) => {
const spy = sinon.spy(wholeModule, 'someFunction2')
wholeModule.someFunction1() // someFunction2 is called inside someFunction1
assert(spy.calledOnce, 'someFunction2 should be called once')
done()
})
问题是,测试失败,因为在 someFunction1 中,直接使用了 someFunction2 函数。我将间谍应用到模块对象的函数中。但这是一个不同的对象。这是 someFunction1 的示例:
function someFunction1() {
someFunction2()
return 2;
}
我知道它不起作用的原因,但我不知道在这种情况下使它起作用的最佳做法是什么?请帮忙!
【问题讨论】:
标签: javascript node.js sinon chai