create-react-app生成的React/Redux项目无法运行Mocha测试
解决Mocha测试React/Redux项目时ES6语法报错的问题
这个报错的核心原因是:Node.js默认只支持CommonJS模块系统(require/module.exports),无法识别ES6的import/export语法,而Mocha直接运行测试代码时没有自动做转译处理。下面是具体的解决方案:
1. 安装必要的依赖
首先安装Babel相关转译工具和Mocha:
npm install --save-dev @babel/core @babel/preset-env @babel/preset-react @babel/register mocha
如果用Yarn的话:
yarn add --dev @babel/core @babel/preset-env @babel/preset-react @babel/register mocha
2. 添加Babel配置文件
在项目根目录新建.babelrc文件,配置Babel的预设来处理ES6+和React语法:
{ "presets": [ "@babel/preset-env", // 把ES6+语法转译为Node.js能识别的版本 "@babel/preset-react" // 转译JSX和React相关语法 ] }
3. 修改测试脚本
在package.json的scripts字段里,更新测试命令,让Mocha在运行前加载Babel转译器:
"scripts": { // 保留其他原有脚本... "test": "mocha --require @babel/register src/**/*.test.js" }
注意:src/**/*.test.js是测试文件的路径,你可以根据实际情况调整(比如测试文件放在__tests__目录下的话,改成src/__tests__/**/*.js即可)。
补充说明
@babel/register的作用是在Mocha执行测试代码前,自动转译所有通过require加载的文件,把ES6模块语法转换成CommonJS,同时处理JSX等React专属语法,这样Mocha就能正常解析并运行测试了。如果你的项目用到了Redux的immer、装饰器等特殊语法,还可以在.babelrc中添加对应的Babel插件来支持。
内容的提问来源于stack exchange,提问作者neymar sabin




