Angular 13升级后Jest报错:无法找到@angular/core/testing模块
解决方案
1. 升级jest-preset-angular到适配Angular 13的版本
你当前使用的jest-preset-angular@12.2.0仅适配Angular 12,与Angular 13不兼容,需升级到13.x系列稳定版本:
npm install jest-preset-angular@13 --save-dev
2. 对齐Angular生态依赖版本
@angular/cdk和@angular/material仍停留在12.x版本,与其他Angular 13包版本冲突,需同步升级:
npm install @angular/cdk@13 @angular/material@13 --save-dev
3. 升级Jest及配套依赖
Angular 13需要更高版本的Jest和ts-jest配合,当前版本过低,需升级到适配jest-preset-angular@13的版本:
npm install jest@27 ts-jest@27 @types/jest@27 --save-dev
4. 调整jest.setup.ts导入顺序
按照官方要求调整导入顺序,确保jest预设先加载:
import 'jest-preset-angular/setup-jest'; import 'zone.js'; import 'zone.js/testing';
5. 优化jest.config.js配置
合并重复的transformIgnorePatterns规则,避免依赖转换冲突:
module.exports = { preset: 'jest-preset-angular', moduleFileExtensions: ['ts', 'html', 'js', 'json', 'mjs'], snapshotSerializers: [], roots: ['src'], moduleNameMapper: { '^lodash-es$': '<rootDir>/node_modules/lodash/index.js' }, setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'], testMatch: ['<rootDir>/src/**/*.spec.ts'], transform: { '^.+\\.ts$': 'ts-jest', '^.+\\.mjs$': 'ts-jest', }, transformIgnorePatterns: ['node_modules/(?!(@angular|lodash-es)/)'], coveragePathIgnorePatterns: ['<rootDir>/node_modules/'], coverageReporters: ['json', 'text', 'html', 'cobertura'], reporters: ['default', ['jest-junit', { outputDirectory: 'TestResults', outputName: 'jest-junit.xml' }]], };
6. 清理依赖缓存并重装
删除旧依赖和锁文件,确保所有版本完全对齐:
rm -rf node_modules package-lock.json npm install
问题根源
低版本的jest-preset-angular会按照Angular 12的模块结构查找@angular/core/testing,而Angular 13的包结构存在变化,同时依赖版本不匹配导致模块解析路径混乱,最终触发找不到模块的错误。
内容的提问来源于stack exchange,提问作者Chris Perko
相关产品推荐
相关产品推荐

