【发布时间】:2020-12-15 13:28:00
【问题描述】:
我正在尝试测试我的导航功能是否称为删除车辆。但它似乎永远不会打电话。我认为这可能与它是一个异步函数有关,但即使我等待完全订阅完成它也不起作用。
.ts:
deleteVehicle(): void {
if (confirm('Bent u zeker dat u deze wagen wilt verwijderen?')) {
this.apiService.deleteVehicle(this.selectedVehicle.id).subscribe(() => this.navigateToListVehicleComponent());
}
}
spec.ts:
beforeEach(() => {
fixture = TestBed.createComponent(VehicleDetailsComponent);
component = fixture.componentInstance;
apiService = TestBed.get(ApiService);
fixture.detectChanges();
});
describe('#deleteVehicle', () => {
it('should navigate to list vehicle component', fakeAsync(() => {
spyOn(window, 'confirm').and.returnValue(true);
spy = spyOn(apiService, 'deleteVehicle').withArgs(component.selectedVehicle.id).and.callThrough();
let navigateSpy = spyOn(component,'navigateToListVehicleComponent').and.callThrough();
component.deleteVehicle();
tick();
expect(spy).toHaveBeenCalled();
expect(navigateSpy).toHaveBeenCalled();
}));
});
service.ts:
private deleteFromAPI(url): any {
return this.http
.delete(this.BASE_API_URL + url)
.pipe(catchError(this.handleError));
}
deleteVehicle(id: number): any {
return this.deleteFromAPI('vehicle/' + id);
}
并在我的测试平台中导入 HttpClientTestingModule。
错误: 预期的间谍 navigateToListVehicleComponent 已被调用。
有人知道我做错了什么吗?
【问题讨论】:
-
你能展示你的测试设置吗?你模拟了
apiService.deleteVehicle方法吗? -
@slideshowp2 我更改了一些代码,希望它更容易理解我现在在做什么。我基本上是在用 HttpClientTestingModule 模拟我的 apiService,然后我监视 apiService.deleteVehicle 方法。
-
您正在使用
callThrough(),它将委托给实际的实现。这可能会导致问题。你能发布apiService.deleteVehicle()方法的实际实现吗? -
我刚刚用 apiService.deleteVehicle() 的实现编辑了帖子,希望对您有所帮助
标签: angular typescript unit-testing jasmine karma-jasmine