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

配置Jest+Babel进行React组件测试时遇ES模块导入报错求助

解决Jest+Babel测试React组件时的ES Module导入报错

1. 确保依赖安装完整

先确认已安装必要的Babel和Jest相关包:

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

2. 调整Babel配置

修改你的babel.config.json,添加modules选项明确转译目标为CommonJS(适配Jest默认模块系统),同时保留React转译规则:

{
  "plugins": [
    "@babel/plugin-proposal-class-properties",
    "@babel/plugin-transform-runtime"
  ],
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        },
        "modules": "commonjs"
      }
    ],
    "@babel/preset-react"
  ]
}

3. 配置Jest转译规则

在项目根目录创建jest.config.js,指定Babel处理JS/JSX文件,并设置React测试所需的浏览器环境:

module.exports = {
  transform: {
    '^.+\\.(js|jsx)$': 'babel-jest'
  },
  moduleFileExtensions: ['js', 'jsx'],
  testEnvironment: 'jsdom',
  transformIgnorePatterns: ['/node_modules/(?!@babel|react)']
};

4. 处理"type": "module"的冲突问题

如果你必须保留package.json中的"type": "module",需要额外配置Jest支持ESM:

  • 将jest.config.js重命名为jest.config.mjs,并修改为ESM格式:
export default {
  transform: {
    '^.+\\.(js|jsx)$': 'babel-jest'
  },
  moduleFileExtensions: ['js', 'jsx'],
  testEnvironment: 'jsdom',
  extensionsToTreatAsEsm: ['.js', '.jsx'],
  transformIgnorePatterns: ['/node_modules/(?!@babel|react)']
};
  • 在package.json的scripts中指定Jest配置文件:
"scripts": {
  "test": "jest --config jest.config.mjs"
}

验证测试运行

创建一个简单的React组件测试文件(比如App.test.jsx),确认报错消失:

import React from 'react';
import { render, screen } from '@testing-library/react';
import App from './App';

test('renders app component', () => {
  render(<App />);
  expect(screen.getByText(/hello/i)).toBeInTheDocument();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:45:34