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

Jest运行文件夹测试时报错“Cannot use import statement outside a module”,但单独测试文件正常

Jest运行文件夹测试时报错“Cannot use import statement outside a module”,但单独测试文件正常

嗨,我来帮你分析下这个问题——这种“单独测文件正常,测文件夹就崩”的情况,大概率是全局Jest和本地项目环境不兼容导致的,再加上node-fetch本身是ES模块,触发了Jest的转译盲区。咱们一步步来解决:

第一步:卸载全局Jest,只用本地项目依赖

全局安装的Jest不会自动读取你项目里的package.json(比如"type": "module")和.babelrc配置,这就导致它处理node-fetch这类ES模块依赖时直接报错。先把全局Jest卸掉:

npm uninstall -g jest

之后所有测试命令都会用你项目node_modules里的本地Jest,它会优先加载项目内的配置,适配你的ES模块环境。

第二步:创建专门的Jest配置文件

你之前没有单独的Jest配置,现在新建一个jest.config.js文件在项目根目录,内容如下:

export default {
  // 指定用babel-jest转译所有JS文件
  transform: {
    "^.+\\.js$": "babel-jest"
  },
  // 让node-fetch跳过node_modules的默认忽略规则,被Babel转译
  transformIgnorePatterns: [
    "/node_modules/(?!node-fetch)"
  ],
  // 识别JS文件作为模块
  moduleFileExtensions: ["js"],
  // 指定测试环境为Node.js(符合你的后端项目场景)
  testEnvironment: "node"
};

这个配置会明确告诉Jest:所有JS文件都用Babel转译,node-fetch例外要被转译,避免它的ES模块语法被Jest当成无效代码。

第三步:验证脚本和依赖

检查你package.json里的test脚本,现在可以保留原来的:

"test": "jest --no-cache"

如果担心npm没找到本地Jest,也可以改成npx jest --no-cache,强制调用本地版本。

另外,你的.babelrc配置是没问题的:@babel/preset-env针对当前Node版本,@babel/plugin-transform-modules-commonjs把ES模块转成Jest能识别的CommonJS,这个不用改。

额外排查点

  • 确认node-fetch版本:如果你用的是v3+,它本身就是纯ES模块,所以必须通过transformIgnorePatterns让Jest转译它,这一步不能少。
  • 测试其他无node-fetch的文件时出错,是因为Jest扫描整个文件夹时,会加载所有依赖链(比如某个文件间接引入了node-fetch),而全局Jest没处理好这个转译,换成本地Jest+正确配置后应该就解决了。

现在你再试试运行npm run test或者jest src/utils/,应该就能正常执行所有测试了!

备注:内容来源于stack exchange,提问作者Shograti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:09:40