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

NestJS单元测试调用UserGroup模型find方法报undefined如何解决

问题解决指南

该错误的核心是测试场景下NestJS依赖注入容器未正确匹配到UserGroup模型的注入token,导致userGroupModel最终为undefined,可按以下步骤排查修复:


排查步骤

  • 1. 验证注入token一致性

    确认三处使用的模型标识完全匹配:

    1. 业务模块注册Mongoose模型的代码:检查MongooseModule.forFeature配置项的name字段是否为UserGroup.name
    2. Service层@InjectModel参数是否和注册时的name完全一致
    3. 测试代码中getModelToken的传参是否和前两处完全一致

    特别注意:如果注册模型时指定了自定义数据库连接名,@InjectModel和getModelToken都需要传入第二个参数指定连接名,否则会出现token不匹配的情况。

  • 2. 检查类导入路径

    确认Service文件和测试文件中导入UserGroup类的路径完全相同,避免因相对路径引用错误导致导入的不是同一个类,最终UserGroup.name作为token无法匹配。

  • 3. 临时验证方案

    可先将三处标识替换为固定字符串验证问题是否消失:

    1. Service中修改为:@InjectModel('UserGroup') private readonly userGroupModel: Model<IUserGroup>
    2. 测试代码中修改为:{ provide: getModelToken('UserGroup'), useValue: { find: jest.fn(() => userGroupResp) } }
    3. 模块注册处也同步修改为name: 'UserGroup'
      若修改后错误消失,即可确定是token匹配问题导致。
  • 4. 检查测试模块依赖完整性

    确认测试模块中所有注入的依赖都已正确mock,避免因其他依赖初始化失败导致整个模块注入异常,可在模块编译后手动获取模型实例排查:

    const userGroupModel = module.get(getModelToken(UserGroup.name));
    console.log(userGroupModel); // 输出为undefined即可确认是token匹配问题
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:06:05