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

React项目配置Jest报错:无法在模块外使用import语句

解决React+Vite项目Jest识别import语句的配置方案

1. 安装必要依赖

执行以下命令安装Babel转译工具及Jest相关依赖:

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

2. 配置babel.config.js

确保Babel能正确转译ES模块和React语法,修改配置文件如下:

module.exports = {
  presets: [
    ['@babel/preset-env', { targets: { node: 'current' } }],
    '@babel/preset-react'
  ]
};

3. 调整jest.config.cjs

在Jest配置中指定转译规则、运行环境及模块解析逻辑:

module.exports = {
  testEnvironment: 'jsdom',
  transform: {
    '^.+\\.(js|jsx|ts|tsx)$': 'babel-jest'
  },
  moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'],
  moduleNameMapper: {
    // 同步Vite中的路径别名(比如@),根据实际项目配置调整
    '^@/(.*)$': '<rootDir>/src/$1'
  },
  setupFilesAfterEnv: ['<rootDir>/src/setupTests.js'] // 可选,用于配置React Testing Library等工具
};

4. 检查package.json配置

  • 若package.json中设置了"type": "module",确保Jest配置文件后缀为.cjs(你当前已满足该要求)。
  • 配置测试命令:
{
  "scripts": {
    "test": "jest"
  }
}

5. 测试用例示例

确保测试用例的导入语法规范,示例如下:

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

test('组件渲染正常', () => {
  render(<MyComponent />);
  expect(screen.getByText('Hello')).toBeInTheDocument();
});

常见问题排查

  • 若仍存在未转译的第三方依赖报错,可在jest.config.cjs中添加transformIgnorePatterns排除特定包:
transformIgnorePatterns: ['/node_modules/(?!(需要转译的包名)/)']
  • 确保测试文件后缀为.test.jsx或.spec.jsx,保证Jest能正确识别。

内容的提问来源于stack exchange,提问作者sp-sathish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:03:13