使用if-else对MatSelectChange进行单元测试



我正在编写单元测试,我有一个简单的方法,它可以根据matSelectChange的值执行某些操作。我如何测试这一点,使代码覆盖率达到100%?

selectionChanged(matSelectChange: MatSelectChange): void {
if (matSelectChange.value === '1') {
this.service.doSomething();
} else if (matSelectChange.value === '2') {
this.service.doSomethingElse();
}
}

我会像一样编写测试

describe('mat-select behaviour', () => {
it('sould call doSomething if value is "1"', () => {
const service = TestBed.inject(ServiceClass)
spyOn(service, 'doSomething')
const matSelect = fixture.debugElement.query(By.css('mat-select'))
matSelect.triggerEventHandler('selectionChange', {value: '1'});
fixture.detectChanges()
expect(service.doSomething).toHaveBeenCalledWith('1');
});
it('sould call doSomething if value is "2"', () => {
const service = TestBed.inject(ServiceClass)
spyOn(service, 'doSomethingElse')
const matSelect = fixture.debugElement.query(By.css('mat-select'))
matSelect.triggerEventHandler('selectionChange', {value: '2'});
fixture.detectChanges()
expect(service.doSomethingElse).toHaveBeenCalledWith('2');
});
})

在使用服务类之前,您必须在测试设置中提供它

providers: [
ServiceClass
]

最新更新