使用 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()
我正在使用 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()