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

Angular 14 集成 Jest 报错:typescript_1.default.canHaveDecorators is not a function

问题分析与解决方案

错误信息

TypeError: typescript_1.default.canHaveDecorators is not a function

  at TypeScriptReflectionHost.getDecoratorsOfDeclaration (node_modules/jest-preset-angular/build/ngtsc/reflection/src/typescript.js:14:49)
  at visitNodes (node_modules/typescript/lib/typescript.js:87646:48)
  at visitLexicalEnvironment (node_modules/typescript/lib/typescript.js:87686:22)
  at Object.visitEachChild (node_modules/typescript/lib/typescript.js:88234:55)
  at transformSourceFileOrBundle (node_modules/typescript/lib/typescript.js:88930:57)
  at transformation (node_modules/typescript/lib/typescript.js:107888:24)

核心原因

你的依赖版本存在兼容性匹配问题,具体为:

  • ts-jest@29.0.5与jest@28.1.3版本不兼容:ts-jest 29.x仅适配Jest 29.x系列,而你使用的是Jest 28.x,版本错位导致TypeScript相关API调用异常。
  • jest-environment-jsdom@29.3.1同样与Jest 28.x版本不匹配,进一步加剧了测试环境的冲突。

解决方案

1. 调整依赖版本

修改package.json中的devDependencies,将ts-jest和jest-environment-jsdom降级到与Jest 28.x匹配的版本:

"devDependencies": {
  // 其他依赖保持不变
  "jest": "^28.1.3",
  "jest-environment-jsdom": "^28.1.3",
  "jest-preset-angular": "^12.2.4",
  "ts-jest": "^28.0.8"
}

2. 重新安装依赖

执行命令清理旧依赖并重新安装:

rm -rf node_modules package-lock.json
npm install

3. 可选:调整Jest配置的ESM设置

Angular 14默认使用CommonJS模块系统,当前配置中ts-jest.useESM: true可能引发额外模块解析问题,建议关闭:

globals: {
  'ts-jest': {
    useESM: false,
    tsconfig: '<rootDir>/tsconfig.spec.json',
    stringifyContentPathRegex: '\\.(html|svg)$'
  }
},

验证修改

运行测试命令确认问题解决:

npm run test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:15:48