如果使用以下内容创建文件
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('acorrectemail@therightformat.com');
assert.isTrue(sendEmailSpy.called);
});
它仍调用sendEmail
函数,测试失败
但是,如果我像这样写module.exports
:
module.exports = {
validateEmail(email) {
this.sendEmail(email);
},
sendEmail(email) {
return true;
},
};
它正确存根...为什么?
答案 0 :(得分:5)
简短回答 - 背景
长答案 - 在第一种情况下,导出的sendEmail
函数不是与validateEmail
使用的内部函数相同。导出的函数将成为正在导出的对象的新属性,并简单地引用内部函数。
在第二种情况中,您明确地从sendEmail
引用导出对象上的this.sendEmail(...)
函数(即validateEmail
),因此它将使用存根版本。
故事的道德 - 你可以找不到你能看到的东西。