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

移动jest.config.ts后Jest遇转换错误,求固定tsconfig下的解决方案

Jest配置文件移至src后类型解析错误的解决方案

问题背景

初始项目中,jest.config.ts位于根目录时测试可正常运行,但因tsconfig.json中rootDir: "."导致部署异常,遂将jest.config.ts移至src目录。移动后测试报错Jest encountered an unexpected token,无法解析TypeScript类型标注,尝试启用ESM配置未解决,要求不修改tsconfig.json解决该问题。

初始项目结构

.
|--src
|  |--component1
|  |  |--service1.ts
|  |--component2
|  |  |--service2.ts
|  |--tests
|  |  |--service1.test.ts
|  |  |--service2.test.ts
|--dist
|--jest.config.ts
|--tsconfig.json
|--package.json

移动后的项目结构

.
|--src
|  |--component1
|  |  |--service1.ts
|  |--component2
|  |  |--service2.ts
|  |--tests
|  |  |--service1.test.ts
|  |  |--service2.test.ts
|  |--jest.config.ts
|--dist    
|--tsconfig.json
|--package.json

初始jest.config.ts

import type { JestConfigWithTsJest } from 'ts-jest'

const jestConfig: JestConfigWithTsJest = {
  verbose: true,
  preset: 'ts-jest',
  testEnvironment: 'node',
}

export default jestConfig

修改后的jest.config.ts(未解决问题版本)

import type { JestConfigWithTsJest } from 'ts-jest'

const jestConfig: JestConfigWithTsJest = {
  verbose: true,
  preset: 'ts-jest',
  testMatch: ['./test/*'],
  extensionsToTreatAsEsm: ['.ts'],
  globals: {
    'ts-jest': {
      useESM: true,
    },
  },
}

export default jestConfig

错误信息

FAIL  src/test/webhook.test.ts
  ● Test suite failed to run

    Jest encountered an unexpected token

    ...(省略重复错误栈内容)

解决方案

1. 修正测试文件路径匹配规则

修改后的配置中testMatch: ['./test/*']路径错误,实际测试文件位于src/tests/目录,需调整为正确的匹配路径:

testMatch: ['<rootDir>/src/tests/**/*.test.ts']

<rootDir>是Jest内置变量,指向项目根目录,确保路径匹配准确。

2. 调整ts-jest配置,明确指定tsconfig路径

移除不必要的ESM配置(若项目未采用ESM模块规范),同时明确指定根目录的tsconfig.json路径,避免因配置文件位置变更导致的解析异常:

import type { JestConfigWithTsJest } from 'ts-jest'

const jestConfig: JestConfigWithTsJest = {
  verbose: true,
  preset: 'ts-jest',
  testEnvironment: 'node',
  // 正确匹配测试文件
  testMatch: ['<rootDir>/src/tests/**/*.test.ts'],
  // 明确指定根目录的tsconfig文件
  globals: {
    'ts-jest': {
      tsconfig: '<rootDir>/tsconfig.json'
    }
  },
  // 确保TypeScript文件被ts-jest转换
  transform: {
    '^.+\\.tsx?$': 'ts-jest'
  },
  // 声明支持的模块扩展名
  moduleFileExtensions: ['ts', 'js']
}

export default jestConfig

3. 更新package.json中的测试命令

确保测试命令明确指向src目录下的配置文件:

"scripts": {
  "test": "jest --config src/jest.config.ts"
}

4. 检查依赖版本兼容性

执行以下命令检查ts-jest、jest、typescript的版本兼容性,避免因版本不匹配导致的转换错误:

npx ts-jest config:check

问题原因说明

  • testMatch路径错误导致Jest未找到正确的测试文件,或找到的文件未被纳入转换范围
  • 强制启用ESM可能与项目默认的CommonJS模块规范冲突,引发类型解析失败
  • 配置文件移至src后,Jest默认的tsconfig路径被改变,需手动指定根目录的配置文件以保证解析规则一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:55:15