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

Angular项目使用Nz-Zorro时NzModalRef参数解析失败测试报错求助

解决NzModalRef单元测试参数解析错误(NG0204)

错误原因

NzModalRef的构造函数依赖NZ-Zorro内部未公开的参数,Angular的依赖注入系统在单元测试环境中无法自动解析这些参数,因此需要手动提供模拟的NzModalRef实例。

解决方案

在组件的.spec文件中,通过TestBed.configureTestingModule的providers数组为NzModalRef提供模拟对象,具体步骤如下:

1. 基础模拟(适用于仅调用close/destroy方法的场景)

如果组件中只使用了NzModalRef的基础方法(如close()、destroy()),可以用jasmine.createSpyObj快速创建模拟实例:

beforeEach(async () => {
  await TestBed.configureTestingModule({
    declarations: [FormNewMemberComponent],
    imports: [
      // 导入组件依赖的Angular/NZ-Zorro模块,例如:
      ReactiveFormsModule,
      NzInputModule,
      NzButtonModule
    ],
    providers: [
      MembersService,
      // 提供NzModalRef的模拟对象
      { 
        provide: NzModalRef, 
        useValue: jasmine.createSpyObj('NzModalRef', ['close', 'destroy']) 
      }
    ]
  }).compileComponents();
});

2. 包含Observable属性的模拟(适用于用到afterClose的场景)

如果组件中订阅了NzModalRef.afterClose Observable,需要补充模拟该属性:

import { of } from 'rxjs';

// ...

{ 
  provide: NzModalRef, 
  useValue: {
    close: jasmine.createSpy('close'),
    afterClose: of(true) // 用of创建模拟的Observable,可根据需求修改返回值
  }
}

验证修改

重新执行单元测试命令:

ng test --code-coverage

此时Angular能正确解析NzModalRef的依赖,错误NG0204会被修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:41:19