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

如何为TypeScript编写的Create React App运行Jest单元测试?

解决TypeScript React项目Jest测试SyntaxError: Cannot use import statement outside a module报错

方案一:使用Create React App内置的测试配置(推荐)

Create React App针对TypeScript React项目已经预置了完整的Jest测试环境,无需手动执行jest --init,直接恢复默认配置即可:

  1. 删除手动创建的jest.config.ts文件
  2. 检查package.json中的test脚本,确保为:
    "scripts": {
      "test": "react-scripts test"
    }
    
  3. 执行yarn test,CRA会自动处理TypeScript、ES模块语法以及React组件的测试转译,你的TSX测试文件就能正常运行。

方案二:自定义Jest配置(适合需要自定义测试规则的场景)

如果必须保留手动初始化的Jest配置,需要补充转译相关配置,让Jest能识别TypeScript和ES模块语法:

1. 安装必要依赖

执行以下命令安装Babel转译相关包:

yarn add -D @babel/preset-typescript @babel/preset-react @babel/preset-env babel-jest identity-obj-proxy
  • identity-obj-proxy用于处理样式文件的导入(如果项目使用CSS/SCSS等)

2. 创建Babel配置文件

在项目根目录创建babel.config.js,添加如下内容:

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

3. 更新Jest配置

修改jest.config.ts,补充转译、文件匹配等关键配置:

export default {
  clearMocks: true,
  collectCoverage: true,
  coverageDirectory: "coverage",
  testEnvironment: "jsdom",
  // 配置转译规则,让babel-jest处理TS/TSX/JS/JSX文件
  transform: {
    '^.+\\.(ts|tsx)$': 'babel-jest',
    '^.+\\.(js|jsx)$': 'babel-jest'
  },
  // 指定Jest能识别的文件扩展名
  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
  // 配置测试文件的匹配规则
  testMatch: [
    '**/tests/**/*.test.(ts|tsx|js)',
    '**/__tests__/**/*.test.(ts|tsx|js)'
  ],
  // 处理样式文件的导入
  moduleNameMapper: {
    '^.+\\.(css|less|scss|sass)$': 'identity-obj-proxy'
  }
};

4. 重新运行测试

执行yarn test,此时TSX测试文件就能正常解析ES模块的import语法,完成测试运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:30:42