Nest.js Jest测试中UserService依赖注入失败问题排查
问题原因与解决方法
原因
报错里第三个依赖显示为?,说明Nest无法识别UserService构造函数中第三个参数AuthService的注入令牌,核心原因大概率是测试文件未正确导入AuthService类,导致{ provide: AuthService, useValue: mockAuthService }里的AuthService为undefined,Nest找不到对应的依赖提供者。
小概率情况:如果真实代码中AuthService是通过自定义令牌(比如@Inject('AUTH_SERVICE'))注入的,而测试中错误地用AuthService类作为令牌,也会导致依赖匹配失败。但从你提供的UserService代码看,第三个参数没有装饰器,所以前者的可能性更高。
解决方法
- 导入
AuthService类到测试文件
在测试文件顶部添加对应路径的导入语句:
import { AuthService } from '../path/to/auth.service'; // 替换为项目实际路径
- 匹配正确的注入令牌(若为自定义令牌场景)
如果真实代码中AuthService是通过自定义令牌注入的(比如UserService构造函数里写了@Inject('AUTH_SERVICE') private authService: AuthService),则测试的providers需修改为:
{ provide: 'AUTH_SERVICE', useValue: mockAuthService },
- 修正测试用例中的变量调用一致性
测试里定义的MockUserRepository是全局模拟对象,而mockUserRepository是从模块中获取的实例,测试用例里的调用需统一使用模块获取的变量,避免逻辑混乱:
// 修正后测试用例的given部分 mockUserFactory.createUser.mockReturnValue(new User(user.email, user.password)); mockUserRepository.findOne.mockRejectedValue([]); // 改为模块获取的变量 mockAuthService.hashPassword.mockResolvedValue('hashPassword'); mockUserRepository.save.mockReturnValue(new User(user.email, user.password)); // 改为模块获取的变量
内容的提问来源于stack exchange,提问作者Crmal
相关产品推荐
相关产品推荐

