我正在学习用jasmine编写测试用例,我试图创建一个测试用例来检查函数中定义的函数是否被称为
我正在尝试测试的函数如下,sData方法是在另一个组件中编写的,该组件由当前组件扩展
public rPage() {
this.sData();
this.setupPage()
}
我写的测试用例如下
it('should check if sData is called', () => {
const sData = spyOn<any>(component, 'sData');
component.rPage();
fixture.detectChanges();
expect(sData).toHaveBeenCalled();
});
在之前就已经在rpage上创建了间谍
beforeEach(() => {
fixture = TestBed.createComponent(BasicComponent);
component = fixture.componentInstance;
spyOn(component, 'rPage');
fixture.detectChanges();
});
仍然当我运行测试时,测试用例失败,说";应已调用间谍sData&",哪里出错
如果要确保调用了sData
,则需要正确地调用rPage
。通过在beforeEach
中包含spyOn(component, 'rPage');
,您可以有效地告诉所有测试永远不要真正运行rPage
,而只是模拟它。因此,它永远不会被调用为真正的,sData
真的永远不会被呼叫。
为了正确检查rPage
,您不需要在测试它的测试中使用间谍,或者将.and.callThrough()
添加到间谍中。该函数实际上被称为
您正在调用函数,然后定义间谍,这就是导致问题的原因。您需要定义间谍,然后调用函数。
尝试低于
it('should check if sData is called', () => {
const toggleSpy = spyOn<any>(component, 'sData');
component.rPage();
fixture.detectChanges();
expect(toggleSpy).toHaveBeenCalled();
});