如果创建包含以下内容的文件

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/

10-12 15:30