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

Jest mock默认导出类报default is not a constructor错误

错误原因

Jest 模拟 ES default 导出模块时,依赖__esModule: true标记识别模块格式,该字段名前后必须是两个下划线。你的mock代码中将该字段错误写为单下划线开头的_esModule,导致Jest无法正确解析导出的构造函数,执行实例化逻辑时就会抛出TypeError: FooService_1.default is not a constructor错误。

修正方式

将mock配置中的_esModule字段修正为__esModule即可,修正后的mock代码如下:

jest.mock('src/js/services/FooService', () => {
  return {
    __esModule: true,
    default: jest.fn().mockImplementation(() => {
      return {
        saveInfo: jest.fn(),
      };
    }),
  };
});

可选优化:如果需要在测试用例中断言saveInfo方法的调用逻辑,可以将方法的mock函数提取到外层作用域,方便直接访问做断言,示例代码:

const mockSaveInfo = jest.fn();
jest.mock('src/js/services/FooService', () => {
  return {
    __esModule: true,
    default: jest.fn().mockImplementation(() => {
      return {
        saveInfo: mockSaveInfo,
      };
    }),
  };
});

// 测试用例中可直接调用断言
// expect(mockSaveInfo).toHaveBeenCalledWith(预期参数)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:21:49