我有一个返回另一个同名函数的函数。在第二个功能中,正在使用其他模块的功能。我只是想测试是否正在调用其他模块的函数。
以下是一些澄清我的意思的代码:
exports.getCache = function (model) {
return function getCache (req, res){
//some code
key = utils.uniqueKey(model, id)
//some code
res.json(result);
}
}
我想检查是否正在调用uniqueKey以及是否正在调用res.json。
任何帮助都表示赞赏,谢谢!
答案 0 :(得分:0)
您可以简单地写一下:
sinon.spy(utils, 'uniqueKey')
在您的测试文件中,可能在beforeEach
函数内。然后,只要调用chai.expect
函数,就很容易检查它:
expect(utils.uniqueKey.called).to.be.true();
expect(utils.uniqueKey.calledWith({modelValue: 'value'}, 'someId')).to.be.true();
其中{modelValue: 'value'}
和'someId'
是model
和id
变量的实际值。
答案 1 :(得分:0)
要使组件可测试,必须使其依赖项可注入。我看到您的代码取决于utils
。要正确地模拟这个,你不能只是require('utils')
,你必须实现一些连接依赖关系的方法。使用一些DI库,或者只是扩展组件的公共接口:
var utils;
module.exports.dependencies = function (_utils) {
utils = _utils;
};
module.exports.getCache = function (model) {
key = utils.uniqueKey(model, id);
};
然后在使用bootstrap调用component.dependencies(require('utils'))
的组件之前的生产代码中。在测试用例中,您可以传递间谍:component.dependencies(spy);