移动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
相关产品推荐
相关产品推荐

