【问题标题】:Unit testing MatSelectChange with if else使用 if else 对 MatSelectChange 进行单元测试
【发布时间】:2022-01-20 08:00:14
【问题描述】:

我正在编写单元测试,我有这个简单的方法,它根据 matSelectChange 的值做一些事情。 如何测试这个代码覆盖率是 100%?

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

【问题讨论】:

  • 嗨,请从 16:55 开始观看此视频 :) youtube.com/watch?v=7dcSpinbgqM - 我认为您应该为每个案例创建两个单元测试。
  • @MateuszŚcigała 谢谢你,我一定会去看看,因为单元测试对我来说简直就是地狱。

标签: angular unit-testing karma-jasmine


【解决方案1】:

我会像这样写测试

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
]

【讨论】:

  • 谢谢你这对我有用。我只需要更改一行 expect(service.doSomething).toHaveBeenCalled();对我来说就是这样。
  • 很高兴为您提供帮助。请将我的答案标记为答案谢谢:)
猜你喜欢
  • 2021-06-03
  • 2020-11-12
  • 2021-02-16
  • 2016-08-16
  • 2019-10-26
  • 2020-12-17
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
相关资源
最近更新 更多