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

