[英]Jest mock sendgrid send email
我在 nodejs 應用程序中使用 sendGrid 電子郵件
https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
基本上,當用戶注冊時,我會發送一封歡迎電子郵件
但是當我為用戶注冊編寫測試時,我想模擬 sendgrid 發送功能。 我怎么能開玩笑呢。 或有關如何測試注冊 api 的任何建議
我們可以使用 sendgrid 沙箱:
https://sendgrid.com/docs/for-developers/sending-email/sandbox-mode/
如果您使用的是 nodejs,請查看以下內容:
對於 javascript/node 版本的 sendgrid,我們添加了以下內容:
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 }
。
為了讓它與 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();
});
這允許我們添加beforeEach(() => mockMailer());
到我們的測試。 值得注意的是,我們只使用 sendMultiple() 通過 sendgrid 發送電子郵件,您可能在應用程序中使用了不同的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.