无法测试是否在Jasmine中调用了嵌套函数



我正在学习用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();
});

相关内容

  • 没有找到相关文章

最新更新