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

将Fetch替换为Axios后Jest测试报SyntaxError问题求助

解决Jest中Axios导入的"Cannot use import statement outside a module"错误

问题核心

将代码中的Fetch替换为Axios后,Jest测试抛出SyntaxError: Cannot use import statement outside a module,原因是Axios当前默认以ES模块(ESM)形式发布,而Jest默认优先处理CommonJS模块,无法直接解析ESM的import语法。

具体解决方案

1. 配置Jest支持ES模块

在项目的Jest配置文件(jest.config.js或jest.config.mjs)中添加ESM支持配置:

module.exports = {
  // 标记需要当作ESM处理的文件扩展名
  extensionsToTreatAsEsm: ['.js', '.mjs'],
  // 使用babel-jest转换ESM代码
  transform: {
    '^.+\\.(js|mjs)$': 'babel-jest'
  },
  // 适配ESM模块解析的路径映射
  moduleNameMapper: {
    '^(\\.{1,2}/.*)\\.js$': '$1'
  }
};

同时确保项目中安装了babel-jest和@babel/preset-env,并在.babelrc中配置:

{
  "presets": [["@babel/preset-env", {"targets": {"node": "current"}}]]
}

2. 让Jest转换node_modules中的Axios

默认情况下Jest会跳过node_modules目录的代码转换,但Axios的ESM代码需要被转换才能被Jest识别。修改Jest配置的transformIgnorePatterns:

module.exports = {
  transformIgnorePatterns: ['/node_modules/(?!axios)/']
};

该配置会让Jest跳过除Axios外的其他node_modules包,仅转换Axios的代码。

3. 临时切换为CommonJS导入(权宜之计)

如果暂时不想调整配置,可以将Axios的导入语句改为CommonJS风格:

const axios = require('axios');

此方法无需修改配置,但不符合ESM的现代代码规范,仅适合快速验证场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:40:54