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

Angular 4集成Jest单元测试报错:split属性未定义求助

Angular 4 集成 Jest 单元测试报错解决方案

问题描述

开发Angular 4项目时,尝试集成Jest 29.3.1做单元测试,执行ng run test命令出现以下错误:

ERROR : while running : ng run test
TypeError: Cannot read property 'split' of undefined at isAfterVersion
\node_modules\jest-preset-angular\build\ngtsc\ts_compatibility\src\ts_cross_version_utils.js:87:67) at Object.
\node_modules\jest-preset-angular\build\ngtsc\ts_compatibility\src\ts_cross_version_utils.js:13:24)
at Module.compile (internal/modules/cjs/loader.js:1085:14)

更换更低版本Jest后,错误依旧。当前项目package.json依赖配置如下:

"dependencies": {
    "@angular/aninations": "^4.4.6",
    "@angular/cdk": "^2.0.0-beta.12",
    "@angular/cli": "1.0.0",
    "@angular/common": "^4.0.0",
    "@angular/compile": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.8",
    "@angular/material": "^2.0.0-beta.12",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic":"4.8.8",
    "@angular/router": "^4.0.8",
    "bootstrap": "3.5.7",
    "core-js": "2.4.1",
    "enhanced-resolve": "^3.3.0",
    "Jest": "29.3.1",
    "jest-preset-anguler": "12.2.3"
}

错误原因

  1. 版本严重不兼容:Jest 29.x和jest-preset-angular 12.x是为Angular 12及以上版本设计的,完全不支持Angular 4这类旧版本。
  2. 依赖拼写错误:package.json里存在多处拼写错误,比如@angular/aninations应为@angular/animations,@angular/compile应为@angular/compiler,jest-preset-anguler应为jest-preset-angular,这类错误会导致依赖加载异常。

解决方案

1. 修正依赖拼写错误

先把package.json里的拼写错误全部修正,确保依赖名称准确无误。

2. 更换适配Angular 4的Jest及配套版本

针对Angular 4,需使用Jest 23.x版本和jest-preset-angular 7.x版本,这是适配Angular 4的稳定组合。修改后的相关依赖(建议移至devDependencies下,因为单元测试工具属于开发依赖):

"devDependencies": {
    "jest": "^23.6.0",
    "jest-preset-angular": "^7.1.1",
    "@types/jest": "^23.3.10"
}

3. 重新安装依赖

删除node_modules文件夹和package-lock.json(或yarn.lock),然后执行:

npm install
# 或使用yarn
yarn install

4. 配置Jest

在项目根目录创建jest.config.js文件,内容如下:

module.exports = {
  preset: 'jest-preset-angular',
  setupTestFrameworkScriptFile: '<rootDir>/src/setupJest.ts',
  roots: ['src'],
  testMatch: ['**/+(*.)+(spec).+(ts)'],
  moduleFileExtensions: ['ts', 'js', 'html'],
  coverageReporters: ['html']
};

同时在src目录下创建setupJest.ts文件:

import 'jest-preset-angular';

5. 更新测试命令

在package.json的scripts里添加或修改测试命令:

"scripts": {
  "test": "jest"
}

之后执行npm test即可运行单元测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:01:13