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

Node.js v18.12.1 ESM环境下Jest模块Mock失败问题求助

Node.js ESM环境下Jest Mock Axios问题解决方案

针对你在Node.js v18.12.1 ESM环境中使用Jest Mock axios遇到的两个错误,以下是具体解决步骤:

1. 修正Jest配置文件

删除原配置中无关的ts-jest设置,替换为ESM适配的配置(jest.config.js):

export default {
  testEnvironment: 'node',
  transform: {},
  // 将.js文件视为ESM处理
  extensionsToTreatAsEsm: ['.js'],
  // 处理ESM导入的扩展名问题
  moduleNameMapper: {
    '^(\\.{1,2}/.*)\\.js$': '$1',
  },
};

2. 调整测试文件代码

ESM环境下Jest的模块Mock逻辑与CommonJS不同,修改user.test.js如下:

import { test, expect, jest } from "@jest/globals";
import Users from './users.js'; // ESM要求导入完整扩展名

// 使用unstable_mockModule对ESM模块进行Mock
jest.unstable_mockModule('axios', () => ({
  default: {
    get: jest.fn(), // 显式定义get为Mock函数
  },
}));

// 动态导入axios,确保获取到Mock后的实例
const axios = (await import('axios')).default;

test('should fetch users', async () => {
  const users = [{name: 'Bob'}];
  const resp = {data: users};
  axios.get.mockResolvedValue(resp);

  // 使用async/await替代then,更直观
  const data = await Users.all();
  expect(data).toEqual(users);
  // 验证axios.get是否被正确调用
  expect(axios.get).toHaveBeenCalledWith('/users.json');
});

3. 优化package.json测试命令

将测试命令简化为:

{
  "scripts": {
    "test": "NODE_OPTIONS=\"--experimental-vm-modules\" jest"
  }
}

完成以上修改后,执行npm test即可正常运行测试,解决之前的require is not defined和mockResolvedValue is not a function错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:35:23