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

NestJS Jest单元测试配置异常:ES模块解析失败求助

解决方案

这个错误是因为 axios 采用了ES模块语法,但Jest默认不会转译node_modules目录下的文件,导致无法解析import语句。以下是具体修复步骤:

1. 修改Jest配置,指定转译特定依赖包

更新你的jest.config.js,调整transform和transformIgnorePatterns配置,让Jest转译axios和依赖它的retry-axios:

module.exports = {
  verbose: true,
  preset: "ts-jest",
  testEnvironment: "node",
  roots: ["./src"],
  // 让ts-jest处理.ts和.js文件,开启允许编译JS的选项
  transform: {
    '^.+\\.(ts|js)$': ['ts-jest', {
      tsconfig: {
        allowJs: true,
      },
    }],
  },
  testRegex: "(/__test__/.*|(\\.|/)(spec))\\.ts?$",
  moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
  // 排除axios和retry-axios,让Jest不对它们跳过转译
  transformIgnorePatterns: [
    '<rootDir>/node_modules/(?!axios|retry-axios)'
  ],
};

2. 确保TypeScript配置兼容CommonJS

检查你的tsconfig.json(或测试专用的tsconfig.spec.json),确保compilerOptions里的module设置为CommonJS,匹配Jest的运行环境:

{
  "compilerOptions": {
    "module": "CommonJS",
    // 其他已有的配置...
  }
}

3. 验证测试运行

重新执行测试命令,此时Jest会转译axios和retry-axios的ES模块代码,应该能正常解析import语句,通过基础测试。

补充说明

你之前尝试的方案没有生效,是因为:

  • 仅设置transformIgnorePatterns: ['/node_modules/']会让Jest跳过所有依赖的转译,包括ES模块格式的axios
  • 错误地排除了lodash-es等无关包,而没有针对实际出问题的axios和retry-axios调整规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:16:05