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
相关产品推荐
相关产品推荐

