导入React时Jest测试套件运行失败,求调试方案
解决Jest测试React组件时的
SyntaxError: Unexpected identifier错误 这个错误的核心原因是Jest没有正确转译ES6模块语法(import/export)——Node.js默认使用CommonJS规范,原生不识别ES6的模块语法,所以需要通过Babel来转译你的测试代码和组件代码。
下面是一步步的解决方案:
1. 安装必要的Babel依赖
首先确保你安装了Babel核心包、适配React和环境的预设,以及babel-jest(用来让Jest调用Babel转译代码):
npm install --save-dev @babel/core @babel/preset-env @babel/preset-react babel-jest
如果你的React版本是17+,还要额外安装Enzyme的适配包(因为官方Enzyme暂时不支持17+):
npm install --save-dev @wojtekmaj/enzyme-adapter-react-17
2. 配置Babel转译规则
在项目根目录创建或修改.babelrc文件(或者babel.config.js,推荐后者用于Monorepo或更复杂的配置),添加React和环境预设:
方式1:使用.babelrc
{ "presets": [ "@babel/preset-env", "@babel/preset-react" ] }
方式2:使用babel.config.js
module.exports = { presets: [ // 适配当前Node.js版本的语法 ['@babel/preset-env', { targets: { node: 'current' } }], // 转译JSX语法 '@babel/preset-react' ] };
3. 配置Jest的转译规则
在package.json里添加Jest的配置,指定用babel-jest处理.js/.jsx文件,同时设置测试环境为jsdom(因为React组件需要DOM环境):
"jest": { "transform": { "^.+\\.(js|jsx)$": "babel-jest" }, "testEnvironment": "jsdom" }
4. 完善Enzyme的配置(如果使用Enzyme)
在你的测试文件顶部添加Enzyme的适配器配置,让它适配你的React版本:
import React from 'react'; import { shallow } from 'enzyme'; import Enzyme from 'enzyme'; // 根据你的React版本替换适配器包 import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; Enzyme.configure({ adapter: new Adapter() }); import Basket from '../../src/components/ClientBasket/basket'; // ... 你的测试代码
额外说明:关于ExperimentalWarning
你看到的(node:79620) ExperimentalWarning: The fs.promises API is experimental是Node.js的版本警告,不影响测试执行,你可以通过升级Node.js到LTS稳定版来消除这个警告。
最后,重新运行你的测试命令,应该就能正常执行了。
内容的提问来源于stack exchange,提问作者Emane Irain
相关产品推荐
相关产品推荐

