使用 spyon 时的代码覆盖率问题

Code Coverage issue when spyon is used

我正在使用 Karma-Jasmine 为我的 component(Angular2 应用程序)编写 unit test。我正在使用 Istanbul 进行代码覆盖率报告。

这是我的测试用例,

it('Should Invoke onNext function', async(() => {
    const fixture = TestBed.createComponent(LoginComponent);
    fixture.detectChanges();
    const login = fixture.componentInstance;

    spyOn(login, 'onNext');

    let email = fixture.debugElement.nativeElement.querySelector("input[name='username']");
    email.value = "email";

    let nextButton = fixture.debugElement.nativeElement.querySelectorAll("button")[1];
    nextButton.click();

    fixture.whenStable().then(() => {
      expect(login.onNext).toHaveBeenCalled();
    })
  }));

如您所见,我正在 spying on onNext function 验证它是否在 nextbutton click 上被调用。它工作正常,测试通过。

但是我的登录页面的代码覆盖率报告显示没有覆盖 onNext 函数。

我做错了什么??

而且如果我不监视 onNext 函数,该函数也会被覆盖,

it('Should Invoke onNext function', async(() => {
    const fixture = TestBed.createComponent(LoginComponent);
    fixture.detectChanges();
    const login = fixture.componentInstance;


    let email = fixture.debugElement.nativeElement.querySelector("input[name='username']");
    email.value = "email";

    let nextButton = fixture.debugElement.nativeElement.querySelectorAll("button")[1];
    nextButton.click();
  }));

使用这个:

spyOn(login, 'onNext').and.callThrough()