升级Angular v13后执行ng test出现Jest报错Cannot set base providers如何解决
报错修复方案
错误原因
该报错是jest-preset-angular的初始化逻辑被重复触发导致的,Angular 13默认采用ESM模块化规范后,若Jest配置存在多入口加载setup-jest的逻辑就会触发该问题。
修复步骤
- 首先检查Jest配置文件(
jest.config.js/jest.config.ts)中的setupFilesAfterEnv配置项,确认是否存在重复引入jest-preset-angular/setup-jest的情况,去掉重复的引入语句,仅保留1次即可。 - 若你在单个测试文件中手动写了
import 'jest-preset-angular/setup-jest',全部删除,统一走Jest全局配置的初始化入口。 - 检查是否同时配置了
preset: 'jest-preset-angular'和手动引入setup-jest的情况,部分版本的jest-preset-angularpreset会默认加载初始化逻辑,此时可删除手动引入的setup-jest语句后重试。 - 若上述操作无效,可在
setupFilesAfterEnv的初始化代码最顶部添加如下逻辑,覆盖重复初始化的校验:
// @ts-ignore globalThis.ngJest = globalThis.ngJest || { ngZone: 'noop', teardown: { destroyAfterEach: true }, skipBaseProviderSetup: true }; import 'jest-preset-angular/setup-jest';
- 最后检查
jest-preset-angular的版本是否和Angular 13适配,Angular 13对应的jest-preset-angular版本范围为11.x~12.x,版本不匹配时先升级/降级到适配版本后重试。
内容的提问来源于stack exchange,提问作者Geka
相关产品推荐
相关产品推荐

