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

如何解决Jest测试中‘未启用实验性语法jsx’的报错?

解决Jest测试中"Support for experimental syntax 'jsx' isn't currently enabled"报错

问题场景

在React-TypeScript项目中使用Jest结合React Testing Library执行单元测试时,测试包含.svg格式图片的.tsx文件,运行命令 npm run test <filename.spec.tsx> 触发如下报错:

Support for experimental syntax 'jsx' isn't currently enabled

报错截图

当前配置文件

jest.config.ts

export default {
  preset: '../../../jest.preset.js',
  transform: {
    '^.+\\.[tj]sx?$': 'babel-jest',
  },
  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
  coverageDirectory: '../../../coverage/libs/shared/dashboard-widgets',
};

package.json devDependencies 片段

...
"devDependencies": {
    "@babel/core": "7.12.13",
    "@babel/plugin-transform-modules-commonjs": "^7.21.2",
    "@babel/preset-flow": "^7.18.6",
    "@babel/preset-react": "^7.18.6",
    "@babel/preset-typescript": "^7.21.0",
...

解决方案

1. 完善Babel配置

确保项目根目录存在.babelrc或babel.config.js,并正确配置React和TypeScript预设,示例配置如下:

{
  "presets": [
    "@babel/preset-typescript",
    ["@babel/preset-react", { "runtime": "automatic" }],
    "@babel/preset-flow"
  ],
  "plugins": ["@babel/plugin-transform-modules-commonjs"]
}

2. 配置Jest处理SVG文件

Jest默认无法解析SVG文件,需通过moduleNameMapper配置mock SVG:
在jest.config.ts中添加:

export default {
  // 原有配置...
  moduleNameMapper: {
    '\\.svg$': '<rootDir>/__mocks__/svgMock.js'
  }
};

然后在项目中创建__mocks__/svgMock.js文件,内容如下:

module.exports = 'SVG_MOCK';
// 或返回React组件:
// module.exports = () => <span>SVG Mock</span>;

3. 统一Babel版本

当前@babel/core版本(7.12.13)与其他预设版本(7.18+)差距较大,可能存在兼容性问题,建议升级@babel/core到与预设相近的版本:

npm install @babel/core@^7.21.0 --save-dev

4. 验证transform配置

确保jest.config.ts中的transform规则正确覆盖.tsx文件,当前配置'^.+\\.[tj]sx?$': 'babel-jest'是正确的,无需修改,但需保证Babel能正确处理该类型文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:21:26