NestJS单元测试调用UserGroup模型find方法报undefined如何解决
问题解决指南
该错误的核心是测试场景下NestJS依赖注入容器未正确匹配到UserGroup模型的注入token,导致userGroupModel最终为undefined,可按以下步骤排查修复:
排查步骤
1. 验证注入token一致性
确认三处使用的模型标识完全匹配:
- 业务模块注册Mongoose模型的代码:检查
MongooseModule.forFeature配置项的name字段是否为UserGroup.name - Service层
@InjectModel参数是否和注册时的name完全一致 - 测试代码中
getModelToken的传参是否和前两处完全一致
特别注意:如果注册模型时指定了自定义数据库连接名,
@InjectModel和getModelToken都需要传入第二个参数指定连接名,否则会出现token不匹配的情况。- 业务模块注册Mongoose模型的代码:检查
2. 检查类导入路径
确认Service文件和测试文件中导入
UserGroup类的路径完全相同,避免因相对路径引用错误导致导入的不是同一个类,最终UserGroup.name作为token无法匹配。3. 临时验证方案
可先将三处标识替换为固定字符串验证问题是否消失:
- Service中修改为:
@InjectModel('UserGroup') private readonly userGroupModel: Model<IUserGroup> - 测试代码中修改为:
{ provide: getModelToken('UserGroup'), useValue: { find: jest.fn(() => userGroupResp) } } - 模块注册处也同步修改为
name: 'UserGroup'
若修改后错误消失,即可确定是token匹配问题导致。
- Service中修改为:
4. 检查测试模块依赖完整性
确认测试模块中所有注入的依赖都已正确mock,避免因其他依赖初始化失败导致整个模块注入异常,可在模块编译后手动获取模型实例排查:
const userGroupModel = module.get(getModelToken(UserGroup.name)); console.log(userGroupModel); // 输出为undefined即可确认是token匹配问题
内容的提问来源于stack exchange,提问作者Honey Lokwani
相关产品推荐
相关产品推荐

