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

如何在React Laravel Mix项目中配置Jest解决import语法报错

报错核心原因

Jest默认运行在CommonJS环境,原生不识别ES Module规范的import语法,同时Laravel Mix自带的Babel构建配置不会自动对Jest的执行环境生效,没有经过转译的import语句会直接被Node.js解析抛出错误。

完整配置步骤

1. 安装依赖

执行对应包管理工具的安装命令,安装Jest和Babel转译相关依赖:

# npm 执行
npm install --save-dev jest babel-jest @babel/preset-env @babel/preset-react react-test-renderer

# yarn 执行
yarn add --dev jest babel-jest @babel/preset-env @babel/preset-react react-test-renderer

2. 配置Babel转译规则

在项目根目录新建babel.config.json文件,写入以下配置,同时兼容ES模块语法和React JSX语法转译:

{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }],
    "@babel/preset-react"
  ]
}

注意:不要将该配置写入.babelrc文件,Laravel Mix与Jest对.babelrc的作用域识别逻辑存在差异,使用根目录的babel.config.json可以同时兼容生产构建和测试环境的转译需求。

3. 新增Jest配置文件

在项目根目录新建jest.config.js文件,适配Laravel Mix的目录结构和资源解析规则:

module.exports = {
  // 匹配项目内所有测试文件,可根据自己的目录结构调整
  testMatch: ["**/resources/**/*.test.js"],
  // 指定js/jsx文件使用babel-jest转译
  transform: {
    "^.+\\.(js|jsx)$": "babel-jest"
  },
  // 放行node_modules中提供ES模块版本的依赖,按需替换成自己项目用到的ESM包
  transformIgnorePatterns: [
    "/node_modules/(?!(lodash-es|react-dnd|@mui/.*)/)"
  ],
  // Mock非JS静态资源,避免Jest解析样式、图片等文件报错
  moduleNameMapper: {
    "\\.(css|less|scss|sass)$": "<rootDir>/resources/js/tests/__mocks__/styleMock.js",
    "\\.(jpg|jpeg|png|gif|svg|webp)$": "<rootDir>/resources/js/tests/__mocks__/fileMock.js"
  }
};

创建配置中引用的mock文件目录和对应文件:

  • 新建resources/js/tests/__mocks__/styleMock.js,内容为:
module.exports = {};
  • 新建resources/js/tests/__mocks__/fileMock.js,内容为:
module.exports = "test-file-stub";

4. 添加测试运行脚本

修改项目根目录package.json的scripts字段,添加测试执行命令:

{
  "scripts": {
    // 保留原有dev、prod等脚本,新增test命令
    "test": "jest"
  }
}
常见兼容问题处理
  • 如果项目中配置了Laravel Mix的路径别名,比如将@指向resources/js目录,需要在jest.config.js中补充路径解析配置:
module.exports = {
  // 其他已有配置
  modulePaths: ["<rootDir>/resources/js"]
}
  • 如果测试文件中写了JSX语法,要么将测试文件后缀改为.jsx,要么在transform规则中明确开启.js文件的JSX解析支持。
  • 不要在package.json中设置"type": "module"开启Node原生ESM模式,Laravel Mix的依赖链大部分基于CommonJS规范,开启原生ESM会触发更多依赖兼容问题,通过Babel转译是稳定性最高的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:24:34