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

TS Jest报错“Cannot use import statement outside module”的配置方案

解决方案

1. 调整Jest配置转译ES模块第三方库

问题核心是Jest默认不会转译node_modules中的ES模块,而axios当前以ES模块格式输出,导致测试时无法识别import语句。修改jest.config.js,指定转译规则并允许转译axios:

/** @type {import('jest').Config} */
const config = {
  preset: 'ts-jest',
  testEnvironment: 'jsdom',
  // 配置TS/TSX用ts-jest转译,JS/JSX用babel-jest转译
  transform: {
    '^.+\\.(ts|tsx)$': 'ts-jest',
    '^.+\\.(js|jsx)$': 'babel-jest',
  },
  // 排除不需要转译的库,例外放行axios等ES模块库
  transformIgnorePatterns: [
    '/node_modules/(?!axios|@testing-library)',
  ],
  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
};

module.exports = config;

2. 配置Babel支持ES模块转译

如果项目未配置Babel,需要创建babel.config.json并安装依赖:

安装依赖

npm install --save-dev @babel/core @babel/preset-env @babel/preset-react @babel/preset-typescript babel-jest

创建babel.config.json

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react",
    "@babel/preset-typescript"
  ]
}

3. 处理package.json的模块类型冲突

如果你的package.json中存在"type": "module",会让Jest以ES模块模式运行,需要给ts-jest添加ES模块适配配置:

// 在jest.config.js中新增
extensionsToTreatAsEsm: ['.ts', '.tsx'],
globals: {
  'ts-jest': {
    useESM: true,
  },
},

若不需要全局ES模块模式,可直接移除package.json中的"type": "module"。

4. 升级axios到稳定版

旧版axios可能存在模块格式兼容问题,执行升级命令:

npm update axios

验证测试

修改配置后重新运行测试:

npm test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:15:29