更新:
为了集中讨论下面的问题,我将测试更改为test.only
。当我将其更改为运行所有测试时,它完美地运行了。
在我的快递申请中,我会在用户注册时向他们发送欢迎邮件。
我目前正在通过supertest
请求端点来测试路由,但似乎我无法实际监视路由中的功能,只能在输出上进行断言。
我使用Jest作为测试框架,但我认为挑战与框架无关。
我的路线(简化):
const sendmail = require('../sendmail');
router.post("/register", function(req, res) {
// Some validation and DB work
sendmail.welomeEmail();
res.send({ success: true, message: 'Signed up succesfully' });
})
我的测试:
test("it should send a welcome email", done => {
const sendmail = require("../sendmail");
const spy = jest.spyOn(sendmail, "welcomeEmail");
return request(app)
.post("/register")
.send({
// User data
})
.then(response => {
expect(response.statusCode).toBe(200);
expect(response.body.success).toBeTruthy();
expect(response.body.message).toBe("Signed up succesfully");
expect(spy).toHaveBeenCalled(); // This doesn't get called
done();
});
});
当我通过创建一个调用该方法的文件来完成这个精确的测试时,我的猜测就是因为它执行request
并且实际上没有调用路由器方法。
如何解决这样的情况,我想确保在路线中使用sendmail模块?
答案 0 :(得分:0)
缺少一个“ c”。在路由器中,您正在呼叫sendmail.welomeEmail();
而不是sendmail.welcomeEmail();