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

Vin*_*nay 7 typescript karma-runner istanbul karma-jasmine angular

我正在unit test为我的component(Angular2应用程序)编写一个使用Karma-Jasmine.我正在使用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();
    })
  }));
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我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();
  }));
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Rob*_*hof 10

用这个:

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