co*_*ndp 5 node.js sendgrid jestjs
我在我的 Nodejs 应用程序中使用 sendGrid 电子邮件
https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
基本上,当用户注册时,我会发送一封欢迎电子邮件
但是当我为用户注册编写测试时,我想模拟 sendgrid 发送函数。我怎么能开玩笑呢。或者关于如何测试注册 api 的任何建议
对于 sendgrid 的 javascript/node 版本,我们添加了以下内容:
mail_settings: {
sandbox_mode: {
enable: process.env.NODE_ENV === 'test',
},
}
Run Code Online (Sandbox Code Playgroud)
所以它在上下文中看起来像这样:
const msg = {
to: email,
from: EMAIL_FROM,
subject,
replyTo: REPLY_TO,
dynamicTemplateData,
templateId,
mail_settings: {
sandbox_mode: {
enable: process.env.NODE_ENV === 'test',
},
}
};
sgMail.send(msg)
Run Code Online (Sandbox Code Playgroud)
该解决方案来自coinhndp以及来自github的语法附加信息。它之所以有效,是因为当我们运行npm test
脚本时,将环境设置为'test'
,然后设置为sandbox_mode { enable: true }
。
为了让它与 jest 一起工作,我们有一个jestSetup.js
文件:
jest.setTimeout(15000);
jest.mock('@sendgrid/mail');
const sgMail = require('@sendgrid/mail');
const defaultMailOptions = { response: 'Okay' };
beforeAll(() => {
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
});
beforeEach(() => {
global.mockMailer = (options=defaultMailOptions) => {
return sgMail.sendMultiple.mockImplementation(() => Promise.resolve(options));
};
});
afterEach(() => {
jest.clearAllMocks();
});
Run Code Online (Sandbox Code Playgroud)
这允许我们添加beforeEach(() => mockMailer());
到我们的测试中。值得注意的是,我们仅使用 sendMultiple() 来通过 sendgrid 发送电子邮件,您可能在应用程序中使用不同的函数。
归档时间: |
|
查看次数: |
5830 次 |
最近记录: |