如果创建包含以下内容的文件
const validateEmail = email => {
sendEmail(email);
};
const sendEmail = email => {
return true;
};
module.exports = {
validateEmail,
sendEmail,
};
还有一个试图终止第二个函数的测试…
it('Should call sendEmail if a valid email is passed', () => {
let sendEmailSpy = sinon.stub(checkEmail, 'sendEmail');
checkEmail.validateEmail('[email protected]');
assert.isTrue(sendEmailSpy.called);
});
它仍然调用
sendEmail
函数,测试失败但是,如果我这样写
module.exports
:module.exports = {
validateEmail(email) {
this.sendEmail(email);
},
sendEmail(email) {
return true;
},
};
它把它插对了…为什么?
最佳答案
简短回答-上下文
长回答-在第一个场景中,导出的sendEmail
函数与validateEmail
使用的内部函数不同。导出的函数成为被导出对象的一个新属性,只需引用内部函数。
在第二个场景中,您显式地引用从sendEmail
导出的对象(即this.sendEmail(...)
)上的validateEmail
函数,因此它将使用存根版本。
故事的寓意-你不能破坏你看不见的东西。
关于node.js - Sinon没有在module.exports上 stub ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47796229/