Angular 测试 - 如何模拟 IF 条件
Angular test - how to mock IF conditions
我试图在我的组件中模拟以下方法,但测试似乎没有进入 if 条件
onChange(){
this.selectedType = this.typeCtrl.value;
this.selectedTypeLabel = this.typeCtrl.value;
if(this.selectedType === 'Org')
this.loadOrg();
else if(this.selectedType === 'Rep'){
this.loadRep();
}
else if(this.selectedType === 'Teis'){
this.loadTeis();
}
else if(this.selectedType === 'All'){
this.data();
}
}
这是我在规范文件中的测试-
it('call onChange', () => {
const spySubscribable = spyOn(component, 'fetch');
const spySubscribable1 = spyOn(component, 'loadOrg');
fixture.debugElement.componentInstance.orgCtrl.setValue('Org');
let val = fixture.debugElement.componentInstance.orgCtrl.value;
component.onChange();
component.selectedType = val;
component.selectedTypeLabel = val;
component.loadOrg();
expect(component.selectedType).toEqual(val);
expect(spySubscribable1).toHaveBeenCalled();
val = 'Rep';
component.selectedType = val;
component.selectedTypeLabel = val;
component.onChange();
fixture.detectChanges();
component.loadRep();
expect(component.selectedType).toEqual(val);
val = 'Teis';
component.selectedType = val;
component.selectedTypeLabel = val;
component.onChange();
fixture.detectChanges();
component.loadTeis();
expect(component.selectedType).toEqual(val);
val = 'All;
component.selectedType = val;
component.selectedTypeLabel = val;
component.onChange();
fixture.detectChanges();
expect(component.selectedType).toEqual(val);
expect(spySubscribable).toHaveBeenCalled();
});
如何在我的方法中测试所有 4 个 if 条件。我试过给它赋值,但它仍然没有覆盖。
当您启动 onChange()
方法时 this.selectedType
并且 this.selectedTypeLabel
从
获取新值
this.selectedType = this.typeCtrl.value;
this.selectedTypeLabel = this.typeCtrl.value;
如果您没有为 typeCtrl
属性赋值,那么 selectedType
和 selectedTypeLabel
将是 undefined
。
尝试组件 component.typeCtrl = new FormControl('Org');
,你的测试应该进入 if 语句
我试图在我的组件中模拟以下方法,但测试似乎没有进入 if 条件
onChange(){
this.selectedType = this.typeCtrl.value;
this.selectedTypeLabel = this.typeCtrl.value;
if(this.selectedType === 'Org')
this.loadOrg();
else if(this.selectedType === 'Rep'){
this.loadRep();
}
else if(this.selectedType === 'Teis'){
this.loadTeis();
}
else if(this.selectedType === 'All'){
this.data();
}
}
这是我在规范文件中的测试-
it('call onChange', () => {
const spySubscribable = spyOn(component, 'fetch');
const spySubscribable1 = spyOn(component, 'loadOrg');
fixture.debugElement.componentInstance.orgCtrl.setValue('Org');
let val = fixture.debugElement.componentInstance.orgCtrl.value;
component.onChange();
component.selectedType = val;
component.selectedTypeLabel = val;
component.loadOrg();
expect(component.selectedType).toEqual(val);
expect(spySubscribable1).toHaveBeenCalled();
val = 'Rep';
component.selectedType = val;
component.selectedTypeLabel = val;
component.onChange();
fixture.detectChanges();
component.loadRep();
expect(component.selectedType).toEqual(val);
val = 'Teis';
component.selectedType = val;
component.selectedTypeLabel = val;
component.onChange();
fixture.detectChanges();
component.loadTeis();
expect(component.selectedType).toEqual(val);
val = 'All;
component.selectedType = val;
component.selectedTypeLabel = val;
component.onChange();
fixture.detectChanges();
expect(component.selectedType).toEqual(val);
expect(spySubscribable).toHaveBeenCalled();
});
如何在我的方法中测试所有 4 个 if 条件。我试过给它赋值,但它仍然没有覆盖。
当您启动 onChange()
方法时 this.selectedType
并且 this.selectedTypeLabel
从
this.selectedType = this.typeCtrl.value;
this.selectedTypeLabel = this.typeCtrl.value;
如果您没有为 typeCtrl
属性赋值,那么 selectedType
和 selectedTypeLabel
将是 undefined
。
尝试组件 component.typeCtrl = new FormControl('Org');
,你的测试应该进入 if 语句