如何在单元测试中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
相关产品推荐
相关产品推荐

