Node.JS:在 Jest 中每次测试后刷新 nodemailer-mock

Node.JS: Refreshing the nodemailer-mock after each test in Jest

我正在使用 Express.js 框架构建一个 Node JS 应用程序。我的应用程序正在使用 nodemailer 包发送电子邮件,https://nodemailer.com/about/. I am writing test using supertest and Jest. I am using nodemailer-mock package, https://www.npmjs.com/package/nodemailer-mock 来模拟我的应用程序。

我可以模拟 nodemailer-mock 文档中提到的为 Jest 发送电子邮件的逻辑。唯一的问题是它不会在每次测试后重置数据/计数。例如,我有两个测试,都在发送电子邮件,当我执行以下断言时,它失败了。

const sentEmails = mock.getSentMail();
    // there should be one
    expect(sentEmails.length).toBe(1);

它失败了,因为在之前的测试中发送了一封电子邮件。我该如何重置它?

假设您的 mock 变量是在模块级别设置(甚至导入)的,这应该涵盖它:

afterEach(() => {
    mock.reset();
});

请记住,此方法似乎还会重置您在模拟上配置的任何其他内容(成功响应、失败响应等),因此您可能也需要每次都执行该设置。这非常适合 beforeEach 块。