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

NestJS Jest单元测试新增第二个手动Mock服务模块报错原因求解

问题根因

你代码中的链式调用 jest.mock('./reader.service').mock('./token.service') 是错误写法,直接导致模块 mock 逻辑异常:

  • jest.mock() 方法本身仅支持单次单个模块的 mock 声明,返回值不为 Jest 实例,不支持链式调用
  • 非法的链式调用会导致第一个 reader.service 的手动 mock 没有被正确注册,你从 Nest 测试容器中拿到的 readerService 实例不是你预期的带预设方法的 mock 对象,所以调用方法时会抛出 is not a function 错误
修复方案

将链式的 mock 声明拆分为两行独立调用即可:

// 替换原来的链式jest.mock代码
jest.mock('./reader.service');
jest.mock('./token.service');

修改后两个服务的手动 mock 都会被 Jest 正常加载,Nest 测试容器注入的实例会携带你预设的所有 mock 方法,原有测试用例即可正常运行。

注意事项

确保 __mocks__ 文件夹下的 mock 文件名和原模块文件名完全一致,比如原模块是 reader.service.ts,mock 文件必须命名为 __mocks__/reader.service.ts,否则 Jest 无法自动匹配手动 mock。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:36:03