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

Nest.js Jest测试中UserService依赖注入失败问题排查

问题原因与解决方法

原因

报错里第三个依赖显示为?,说明Nest无法识别UserService构造函数中第三个参数AuthService的注入令牌,核心原因大概率是测试文件未正确导入AuthService类,导致{ provide: AuthService, useValue: mockAuthService }里的AuthService为undefined,Nest找不到对应的依赖提供者。

小概率情况:如果真实代码中AuthService是通过自定义令牌(比如@Inject('AUTH_SERVICE'))注入的,而测试中错误地用AuthService类作为令牌,也会导致依赖匹配失败。但从你提供的UserService代码看,第三个参数没有装饰器,所以前者的可能性更高。

解决方法

  1. 导入AuthService类到测试文件
    在测试文件顶部添加对应路径的导入语句:
import { AuthService } from '../path/to/auth.service'; // 替换为项目实际路径
  1. 匹配正确的注入令牌(若为自定义令牌场景)
    如果真实代码中AuthService是通过自定义令牌注入的(比如UserService构造函数里写了@Inject('AUTH_SERVICE') private authService: AuthService),则测试的providers需修改为:
{ provide: 'AUTH_SERVICE', useValue: mockAuthService },
  1. 修正测试用例中的变量调用一致性
    测试里定义的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:34:57