You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单元测试中Mock @nestjs-modules/mailer的sendMail方法

NestJS单元测试Mock MailerService示例

针对你提供的sendEmailService,可以用Jest配合NestJS的Test模块来MockMailerService的sendMail方法,避免调用真实邮件API。以下是完整的单元测试用例:

import { Test } from '@nestjs/testing';
import { MailerService } from '@nestjs-modules/mailer';
import { sendEmailService } from './send-email.service';

describe('sendEmailService', () => {
  let service: sendEmailService;
  let mailerService: jest.Mocked<MailerService>;

  beforeEach(async () => {
    // 创建Mock的MailerService
    const mockMailerService = {
      sendMail: jest.fn().mockResolvedValue(true),
    };

    const moduleRef = await Test.createTestingModule({
      providers: [
        sendEmailService,
        {
          provide: MailerService,
          useValue: mockMailerService,
        },
      ],
    }).compile();

    service = moduleRef.get<sendEmailService>(sendEmailService);
    mailerService = moduleRef.get(MailerService) as jest.Mocked<MailerService>;
  });

  it('should call sendMail with correct parameters and return "Success"', async () => {
    // 执行测试方法
    const result = await service.SendEmail({});

    // 验证返回值正确
    expect(result).toBe('Success');

    // 验证sendMail方法被调用,且参数符合预期
    expect(mailerService.sendMail).toHaveBeenCalledWith({
      to: 'user2@abc.com',
      from: 'sender@abc.com',
      subject: 'Testing mail',
    });
  });
});

关键说明:

  • Mock MailerService:通过useValue提供一个包含sendMailMock函数的对象,用jest.fn().mockResolvedValue(true)模拟异步成功返回
  • 测试验证:
    • 检查SendEmail方法的返回值是否为Success
    • 检查sendMail是否被调用,且传入的邮件参数完全符合预期

内容的提问来源于stack exchange,提问作者Aks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:33:18