GitHub Actions运行jest时报jest.config.ts的registerer.enabled不是函数错误
错误原因
- 该报错为Jest加载TypeScript格式配置文件时的依赖兼容问题,本地运行正常是因为本地依赖版本匹配,CI环境触发问题的核心原因包括:
jest与ts-jest大版本不匹配,两者大版本必须完全一致才能保证兼容,如jest 29必须搭配ts-jest 29使用- ts-jest v29及以上版本废弃了
ts-jest/utils的导入路径,pathsToModuleNameMapper改为从ts-jest根路径直接导出,旧导入方式会导致配置加载异常 - 使用ESM语法
export default导出配置,Jest默认采用CommonJS模式加载TS配置文件,语法不兼容触发加载失败 - CI环境未使用lockfile安装依赖,安装的依赖版本与本地不一致,导致本地运行正常CI报错
修复方案
- 第一步:对齐jest和ts-jest版本,保证两者大版本一致,同时提交package-lock.json/yarn.lock/pnpm-lock.yaml到仓库,CI安装依赖使用
npm ci(pnpm对应pnpm i --frozen-lockfile,yarn对应yarn install --frozen-lockfile),确保CI依赖版本和本地完全相同 - 第二步:修改ts-jest的导入写法,适配新版本规范:
把配置中对应代码块
import tsJestUtils from 'ts-jest/utils' const { pathsToModuleNameMapper } = tsJestUtils
替换为
import { pathsToModuleNameMapper } from 'ts-jest'
- 第三步:修改配置导出方式,把
export default config改为module.exports = config,符合Jest默认的CommonJS加载逻辑 - 可选替代方案:将
jest.config.ts改为jest.config.js,用JS编写配置,从根源避免TS配置加载的兼容问题 - 如果需要保留ESM导出方式,可以修改package.json的test脚本为:
"test": "NODE_OPTIONS=--experimental-vm-modules jest"
内容的提问来源于stack exchange,提问作者yen
相关产品推荐
相关产品推荐

