Sinon没有在module.exports上存根

时间:2017-12-13 15:04:37

标签: node.js sinon

如果使用以下内容创建文件

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;
  },
};

它正确存根...为什么?

1 个答案:

答案 0 :(得分:5)

简短回答 - 背景

长答案 - 在第一种情况下,导出的sendEmail函数不是validateEmail使用的内部函数相同。导出的函数将成为正在导出的对象的新属性,并简单地引用内部函数。

在第二种情况中,您明确地从sendEmail引用导出对象上的this.sendEmail(...)函数(即validateEmail),因此它将使用存根版本。

故事的道德 - 你可以找不到你能看到的东西。