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
相关产品推荐
相关产品推荐

