Angular 9配置Jest(jest-preset-angular v9)遇ngModule空值错误
Angular 9 + Jest 9 配置报错:
TypeError: Cannot read property 'ngModule' of null 在Angular 9项目中配置Jest,使用v9版本的jest-preset-angular,测试代码可运行但抛出TypeError: Cannot read property 'ngModule' of null错误,以下是当前配置和测试代码,及调试解决步骤:
当前 jest.config.json 配置
{"preset": "jest-preset-angular", "setupFilesAfterEnv": [ "<rootDir>/setup-jest.ts" ], "transformIgnorePatterns": [ "node_modules/(?!@ngrx|ngx-socket-io)" ], "transform": { "^.+\\.(ts|js|html)$": "ts-jest" }, "testPathIgnorePatterns": [ "<rootDir>/node_modules/", "<rootDir>/dist/", "<rootDir>/src/test.ts" ], "modulePaths": ["<rootDir>"]}
测试文件代码
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { myComponent } from './knowuser.component'; import 'zone.js'; import 'zone.js/dist/async-test.js'; import 'zone.js/dist/proxy.js'; import 'zone.js/dist/zone-testing'; describe('myComponent', () => { let component: myComponent; let fixture: ComponentFixture<myComponent>; beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ myComponent ] }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(myComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); });
调试解决步骤
检查setup-jest.ts配置
确保setup-jest.ts中正确导入jest-preset-angular的初始化代码,内容需包含:import 'jest-preset-angular';该文件缺失或配置错误是此类ngModule报错的常见原因。
移除测试文件中的zone.js重复导入
jest-preset-angular已自动配置zone-testing环境,手动导入的zone.js模块会和预设冲突,直接删除以下导入行:import 'zone.js'; import 'zone.js/dist/async-test.js'; import 'zone.js/dist/proxy.js'; import 'zone.js/dist/zone-testing';调整jest的transform规则
使用jest-preset-angular自带的转换器替代手动配置的ts-jest,避免版本兼容问题,修改transform字段:"transform": { "^.+\\.(ts|js|html)$": "jest-preset-angular" }补全组件依赖配置
如果myComponent依赖其他模块、服务或指令,需在TestBed.configureTestingModule中添加对应声明/导入:TestBed.configureTestingModule({ declarations: [ myComponent, 依赖的管道/指令 ], imports: [ 依赖的模块 ], providers: [ 依赖的服务 ] })清除Jest缓存
执行命令清除缓存,避免旧缓存引发异常:npx jest --clearCache
内容的提问来源于stack exchange,提问作者TheViralGriffin
相关产品推荐
相关产品推荐

