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
相关产品推荐
相关产品推荐

