我正在尝试对功能(testFunc)进行单元测试。 testFunc调用另一个我要模拟的函数(secondFunc)。我可以模拟secondFunc以便在testFunc上下文中调用它时,调用secondFunc的spiedOn版本吗?如果不是,我应该如何重新格式化我的browserify模块以使其可测试?
目前,安装程序如下所示:
app.js(浏览器模块)
module.exports = (function () {
function testFunc() {
secondFunc();
}
function secondFunc(){
console.log('not mocked!');
}
return {
testFunc, secondFunc
};
})();
test.js(茉莉花测试)
describe("testFunc", () => {
let app = require('./app');
beforeEach(() => {
spyOn(app, 'secondFunc');
});
it("should call secondFunc spy", () => {
app.testFunc();
expect(app.secondFunc).toHaveBeenCalled();
});
});
最佳答案
您现在拥有的方式是,spyOn
用代理替换返回对象上的secondFunc
属性,但是您的代码调用了匿名函数闭包内的secondFunc
函数。有几种方法可以重组代码以更好地公开功能。
您可以通过以下方式构建模块:
exports.testFunc = function() {
exports.secondFunc();
}
exports.secondFunc = function(){
console.log('not mocked!');
}
它更小,更易于阅读,并且可以模拟
secondFunc
函数。