我正在尝试使用服务实现单元测试。我想澄清为什么这不起作用。
我的spec类的setUp。
beforeEach(() => {
fixture = TestBed.createComponent(testComp);
service = fixture.debugElement.injector.get(TestService);
});
it('mockService', () => {
spyOn(service, "testFuncCall");
let buttonClick = fixture.debugElement.query(By.css('.testFuncCall'));
buttonClick.triggerEventHandler('click', null);
expect(service.testFuncCall).toHaveBeenCalled();
})
所以上面运行正常,如果我点击按钮 - 点击其他按钮就会失败。 我试图做的是
it('mockService', () => {
spyOn(service, "testFuncCall");
spyOn(component, "testFuncCall");
let buttonClick = fixture.debugElement.query(By.css('.testFuncCall'));
buttonClick.triggerEventHandler('click', null);
expect(component.testFuncCall).toHaveBeenCalled();
expect(service.testFuncCall).toHaveBeenCalled();
})
这会抛出一个错误,说已经调用了Expected spy testFuncCall。只是想知道为什么会这样。该组件有一个名为testFuncCall的方法,它启动按钮单击。该方法调用具有同名testFuncCall方法的Service。
如果我将它分开,一个用于测试component.testFuncCall
是否已被调用,另一个用于调用service.testFuncCall
,看起来很好。但将这些组合成一个会引发错误吗?
答案 0 :(得分:0)
当你监视一个方法时,你基本上用一个不做任何事情的方法替换它(除了记录以后能够验证它们的调用)。因此,假组件功能不再做任何事情,因此不再调用该服务。
您可以使用
使其完成实际操作spyOn(component, "testFuncCall").and.callThrough();