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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:30:53