控制器单元测试,包括调用发送电子邮件的方法。解决该方法存根将返回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);
});