解决在Mocha单元测试中发送电子邮件

时间:2019-01-18 15:00:29

标签: node.js mocha nodemailer

控制器单元测试,包括调用发送电子邮件的方法。解决该方法存根将返回500。

控制器不会直接调用smstransport发送电子邮件。它只是调用设置呼叫电子邮件的Class方法。但是,仅在该方法存根上使用Collection<DistGroup> values = bumperCars.stream() .collect(HashMap::new, (HashMap<SizeColorCombination, DistGroup> res, BumperCar bc) -> { SizeColorCombination dg = new SizeColorCombination(bc.color, bc.size); DistGroup distGroup = res.get(dg); if(distGroup != null) { distGroup.addCarCode(bc.carCode); }else { List<String> codes = new ArrayList(); distGroup = new DistGroup(bc.size, bc.color, codes); res.put(dg, distGroup); } },HashMap::putAll).values(); 会引发500错误。我还需要模拟发送的电子邮件吗?我什至为邮件服务添加了一些chai.spy来查看是否可行。

单元测试的其他所有部分都通过了。仅有一封电子邮件会抛出500。

控制器-仅电子邮件部分

resolve()

单元测试-仅电子邮件部分

const emailModel = new Email();
await emailModel.sendSignupMail(user, 'en');

结果

let email = new Email();
beforeEach(() => {
    chai.spy.on(Template.prototype, 'load');
    chai.spy.on(mail, 'sendEmail', () => {});
    stubSendMail = sinon.stub(email, 'sendSignupMail').resolves();
})

afterEach(() => {
    chai.spy.restore();
    if (stubSendMail) stubSendMail.restore();
})

it('should return a 200 if success', async () => {
  await userLoginController.signup(req, res, next);
  expect(res.statusCode).to.equal(200);
});

0 个答案:

没有答案