簡體   English   中英

Jest 模擬 sendgrid 發送電子郵件

[英]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,請查看以下內容:

https://github.com/sendgrid/sendgrid-nodejs/issues/612

對於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM