我想在Angular中为以下功能编写单元测试:
exportToCsv(query: string) {
this.exportToCsvService.exportDataAndGetCsv(query).pipe(
first(),
tap(response => this.fireCsvDownload(response))
).subscribe();
}
函数exportDataAndGetCsv进行http调用并返回一个字符串。我认为我要编写的测试应该检查fireCsvDownload是否已执行。我尝试过:
it('should fire fireCsvDownload after exporting data and geting csv ', () => {
component.exportToCsv(query);
fixture.detectChanges();
expect(component.fireCsvDownload).toHaveBeenCalled();
});
但是我得到一个错误:Error: <toHaveBeenCalled> : Expected a spy, but got Function.
我应该怎么办?我向exportToCsv
提供了TestBed
服务,而exportDataAndGetCsv
返回了of('text').
答案 0 :(得分:2)
创建一个在expect
中替换的间谍:
it('should fire fireCsvDownload after exporting data and geting csv ', () => {
const mySpy = spyOn(component, 'fireCsvDownload');
component.exportToCsv(query);
fixture.detectChanges();
expect(mySpy).toHaveBeenCalled();
});
您可能需要做:
const mySpy = spyOn(component, 'fireCsvDownload').and.callThrough();
但是我不确定是否需要自我测试。