在升级Angular 14的小版本后,如果你的组件测试中注入了MAT_DIALOG_DATA,你可能会遇到以下错误信息:TypeError: Cannot read properties of undefined (reading 'data')。 在此情况下,需要在测试文件中增加以下代码以模拟MAT_DIALOG_DATA:
beforeEach(() => { TestBed.configureTestingModule({ imports: [MatDialogModule], declarations: [MyComponent], providers: [ { provide: MAT_DIALOG_DATA, useValue: {} } ] }); fixture = TestBed.createComponent(MyComponent); component = fixture.componentInstance; dialog = TestBed.inject(MatDialog); });
注意:如果你的组件测试中有使用Dependency Injection(依赖注入)的话,需要将上述提供者(providers)放在原有的提供者后,并使用multi: true选项。例如:
beforeEach(() => { TestBed.configureTestingModule({ imports: [MatDialogModule], declarations: [MyComponent], providers: [ { provide: MyService, multi: true, useValue: { myMethod: () => {} // Replace with your method } }, { provide: MAT_DIALOG_DATA, useValue: {} } ] }); fixture = TestBed.createComponent(MyComponent); component = fixture.componentInstance; dialog = TestBed.inject(MatDialog); });
这样就可以成功模拟MAT_DIALOG_DATA并解决测试失败的问题了。