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

Jest原生JavaScript环境下ES6类自动Mock失败,调用mockClear报错

问题原因

你当前使用Jest 27的原生ESM实验模式(通过--experimental-vm-modules启用),此模式下的自动Mock逻辑和CommonJS模式存在差异:自动Mock生成的类mock实例的mockClear、toHaveBeenCalled等属性/方法,不会直接挂载到default导出的导入变量上,所以直接调用Foo.mockClear会抛出不存在的错误。

解决方案

修改测试文件的导入方式,导入整个Foo模块后访问default导出的mock实例即可,修改后的测试代码如下:

import * as FooModule from "../src/foo.js";
import FooStorage from "../src/foostorage.js";

import { jest } from "@jest/globals";

jest.mock("../src/foo.js");

beforeEach(() => {
    FooModule.default.mockClear();
});

test("if the Foo constructor hasn`t been called", () => {
    const storage = new FooStorage();
    expect(FooModule.default).not.toHaveBeenCalled();
});

可选优化

如果希望后续升级减少适配问题,可将Jest版本升级到28及以上,原生ESM的Mock兼容逻辑已经做了大量优化,很多CommonJS下的Mock写法可以直接复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:57:03