Angular TypeError:无法读取属性';客户';茉莉花中未定义的
对于下面的EditFlag组件,我编写了角度测试用例。在执行spec文件中提到的以下测试用例时,我看到了这个错误TypeError:无法读取未定义的属性'client' 另外,我想在我的测试用例中包含switch case的测试用例。 有人能帮我处理这个测试用例吗 editflag.component.tsAngular TypeError:无法读取属性';客户';茉莉花中未定义的,angular,typescript,jasmine,karma-jasmine,Angular,Typescript,Jasmine,Karma Jasmine,对于下面的EditFlag组件,我编写了角度测试用例。在执行spec文件中提到的以下测试用例时,我看到了这个错误TypeError:无法读取未定义的属性'client' 另外,我想在我的测试用例中包含switch case的测试用例。 有人能帮我处理这个测试用例吗 editflag.component.ts constructor(private flagService: FlagService, private editFlagDialog: MatDialogRef<EditFlagC
constructor(private flagService: FlagService,
private editFlagDialog: MatDialogRef<EditFlagComponent>),
@Inject(MAT_DIALOG_DATA) public data: any,
private dialog: MatDialog){}
ngOnInit: void {
switch(this.data.action) {
case 'create':
this.flagClone = this.initializeFlagClone();
break;
case 'edit':
this.flagEdit();
break;
default:
console.log('No action');
}
}
public flagEdit(){
const res = {...this.data};
this.flagVar = { ...res.flag};
if(this.data.flag.client == null ) {
this.isSearch = false;
this.initializeClient();
}
}
const testData = {
"flag":{
id: null, //string
description: null, //string
url: null, //string
client: null
},
"action": "edit"
};
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [
EditFlagComponent
],
providers: [
HttpClient,
HttpHandler,
{provide: MatDialog, useValue: {} },
{provide: MatDialogRef, useValue: {} },
{provide: MAT_DIALOG_DATA, useValue: {testData} },
]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EditFlagComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should call flagEdit',() => {
component.flag.client = testData.flag.client;
component.flagEdit();
fixture.detectChanges();
expect(component.isSearch).tobeFalsy();
});
此外,希望覆盖范围摘要中包含以下块:
switch(this.data.action) {
case 'create':
this.flagClone = this.initializeFlagClone();
break;
case 'edit':
this.flagEdit();
break;
default:
console.log('No action');
}
我认为你做错了 更改此行:
{provide: MAT_DIALOG_DATA, useValue: {testData} },
为此:
{provide: MAT_DIALOG_DATA, useValue: testData },
然后拆下线路
component.flag.client = testData.flag.client;
在单元测试中。我认为您的
useValue
做得不对
更改此行:
{provide: MAT_DIALOG_DATA, useValue: {testData} },
为此:
{provide: MAT_DIALOG_DATA, useValue: testData },
然后拆下线路
component.flag.client = testData.flag.client;
在单元测试中。错误为TypeError:无法读取未定义的属性“client”。此错误在This.data.flag.client==null行中抛出
您定义了@Inject(MAT_DIALOG_DATA)公共数据:any,
,并且在测试中您有{provide:MAT_DIALOG_DATA,useValue:{testData},
这就像有{provide:MAT_DIALOG_DATA,useValue:{testData:testData}}},`即
this.data = { testData: {
"flag":{
id: null, //string
description: null, //string
url: null, //string
client: null
},
"action": "edit"
}}
现在出现了问题,您没有设置this.data.flag
要解决这个问题,只需将{provide:MAT\u DIALOG\u DATA,useValue:{testData}},
设置为{provide:MAT\u DIALOG\u DATA,useValue:testData},
,现在您将正确地提供值错误为TypeError:无法读取未定义的属性“client”。此错误在This.data.flag.client==null行中抛出
您定义了@Inject(MAT_DIALOG_DATA)公共数据:any,
,并且在测试中您有{provide:MAT_DIALOG_DATA,useValue:{testData},
这就像有{provide:MAT_DIALOG_DATA,useValue:{testData:testData}}},`即
this.data = { testData: {
"flag":{
id: null, //string
description: null, //string
url: null, //string
client: null
},
"action": "edit"
}}
现在出现了问题,您没有设置this.data.flag
要解决这个问题,只需将{provide:MAT_DIALOG_DATA,useValue:{testData}},
设置为{provide:MAT_DIALOG_DATA,useValue:testData},
,现在当我使用{provide:MAT DIALOG_DATA,useValue:testData}从测试数据ie中删除括号时,您将正确地提供值。我收到TypeError:_this.handler.handle不是一个函数通过在每次(()=>{TestBed.resetTestingModule();})之后添加解决了此问题代码>以及如何涵盖此开关案例案例“创建”:this.flagClone=this.initializeFlagClone();打破默认值:console.log('No action')代码>。当我使用此{provide:MAT\u DIALOG\u DATA,useValue:testData}
从testData ie中删除括号时。我收到TypeError:_this.handler.handle不是一个函数通过在每次(()=>{TestBed.resetTestingModule();})之后添加解决了此问题代码>以及如何涵盖此开关案例案例“创建”:this.flagClone=this.initializeFlagClone();打破默认值:console.log('No action')代码>。我确实尝试了您上面提到的更改,但得到了TypeError:\u this.handler.handle不是函数我确实尝试了您上面提到的更改,但得到了TypeError:\u this.handler.handle不是函数