我在我的nodejs应用中使用sendGrid电子邮件
https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
基本上,当用户注册后,我会发送一封欢迎电子邮件
但是当我编写用户注册测试时,我想模拟sendgrid send函数。我怎么能开玩笑。或有关如何测试注册api的任何建议
答案 0 :(得分:0)
我们可以使用sendgrid沙箱:
https://sendgrid.com/docs/for-developers/sending-email/sandbox-mode/
如果您使用的是nodejs,请检查以下内容:
答案 1 :(得分:0)
对于sendgrid的javascript /节点版本,我们添加了以下内容:
mail_settings: {
sandbox_mode: {
enable: process.env.NODE_ENV === 'test',
},
}
所以在上下文中看起来像这样:
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)
此解决方案来自coinhndp以及来自github的语法附加信息。之所以起作用,是因为在运行npm test
时,脚本会将环境设置为'test'
,然后将环境设置为sandbox_mode { enable: true }
。
要使其开玩笑,我们有一个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();
});
这允许我们将beforeEach(() => mockMailer());
添加到测试中。值得注意的是,我们仅使用sendMultiple()通过sendgrid发送电子邮件,您可能在应用程序中使用了其他功能。