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

Jest模拟实现(mock implementation)无效果,调用始终返回undefined

解决Jest模拟service1返回undefined的问题

原因1:ES模块模拟未标记__esModule: true

如果项目使用ES模块(比如package.json中设置了"type": "module"),Jest需要在mock对象中添加__esModule: true才能正确识别命名导出。修改mock代码如下:

import { service1 } from "./service";

jest.mock("./service", () => ({
  __esModule: true, // 新增该属性
  service1: jest.fn().mockImplementation(() => {
    return "default mock implementation";
  }),
}));

describe("Test mock service", () => {
  it("test1", () => {
    console.log(service1()); // 此时应返回mock指定内容
  });
});

原因2:Jest缓存导致mock未更新

Jest的模块缓存可能导致旧mock生效,运行测试前先清除缓存:

jest --clearCache

之后重新执行测试命令即可。

原因3:模块路径错误

确认测试文件中./service的路径是否准确,比如测试文件若在__tests__/子目录,路径应改为../service,避免因路径错误导致mock未覆盖原模块。

验证mock是否生效

可以在测试中先打印service1,确认它是Jest的模拟函数:

it("test1", () => {
  console.log(service1); // 正常应为: [Function: mockConstructor]相关内容
  console.log(service1());
});

若输出不是模拟函数,说明mock未正确覆盖原模块,需重新检查路径和ES模块配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:45:28