这通常发生在使用间谍函数时。 让我们考虑以下示例代码:
it('should call some function', () => {
const spy = spyOn(component, 'someFunction');
component.someOtherFunction();
expect(spy).toHaveBeenCalled();
});
在此测试中,我们创建了一个组件上某个函数的间谍函数,并在我们关心的代码路径上调用了某个其他函数。 我们最终验证了我们的函数是否被调用。
但是,有时我们可能需要调用实际的函数而不是间谍函数。 在这种情况下,我们必须使用原来的函数而不是间谍函数:
it('should call some function', () => {
const original = component.someFunction;
spyOn(component, 'someFunction').and.callThrough();
component.someOtherFunction();
expect(original).toHaveBeenCalled();
});
在这个解决方法中,我们使用了“and.callThrough()”而不是仅仅调用“spyOn”,这样间谍函数就不会替换原来的函数,而是按原样运行。 在这种情况下,我们可以验证调用了我们想要的函数而不是间谍函数。