angular 对具有 cont 和 for 循环的方法进行单元测试

angular unit testing a method having a cont and a for loop

我正在 Angular 使用 jasmine 进行单元测试。我有一个包含 constfor 循环的方法。下面是代码:

private initializeFilterArrays() {
    const today = new Date().getFullYear();
    for (let i = 0; i < 5; i++) {
      this.yearsFilter.push(today - i);
    }
  }

这个html为:

<button (click)="initializeFilterArrays()" id="init">Filter</button>

spec.ts:

it('clicking on "Filter" should filter', () => {
   const filterBtn = debugElement.query(By.css('#init'));
   filterBtn.triggerEventHandler('click', {});
   ...
}

那么,在测试用例中,触发点击后,我应该写些什么,以便执行该方法的所有行?我想测试是否所有的行都被执行了。以及如何让所有的行都执行?如果我想要总代码覆盖率怎么办?

您可以断言 yearsFilter 实例变量具有正确的长度。

it('clicking on "Filter" should filter', () => {
   const filterBtn = debugElement.query(By.css('#init'));
   filterBtn.triggerEventHandler('click', {});
   expect(component.yearsFilter.length).toBe(/* new length you expect with all the pushes */);
   // you can also do other assertions on the yearsFilter array as well.
   // Edit 
   expect(component.yearsFilter.includes(2021)).toBeTruthy();
}