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

Unit testing MatSelectChange with if else

我正在编写单元测试,我有这个简单的方法,它根据 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');
  });
})

在您可以使用服务之前class您必须在测试设置中提供它

providers: [
   ServiceClass
]