如果创建具有以下内容的文件
const validateEmail = email => {
sendEmail(email);
};
const sendEmail = email => {
return true;
};
module.exports = {
validateEmail,
sendEmail,
};
Run Code Online (Sandbox Code Playgroud)
并尝试测试第二个功能的测试...
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);
});
Run Code Online (Sandbox Code Playgroud)
它仍然调用sendEmail函数,测试失败
但是,如果我这样写module.exports:
module.exports = {
validateEmail(email) {
this.sendEmail(email);
},
sendEmail(email) {
return true;
},
};
Run Code Online (Sandbox Code Playgroud)
它正确地存根...为什么?
简短答案-内容
长的答案-在第一种情形下,导出的sendEmail功能是不一样的使用由内部一个validateEmail。导出的函数成为导出对象的新属性,并且仅引用内部函数。
在第二种情况下,您sendEmail在导出的对象(即this.sendEmail(...))上显式引用了该函数,validateEmail因此它将使用存根版本。
这个故事的寓意-您不能存根看不见的东西。
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |