I am trying to test if my navigate function is called deleting a vehicle. But it seems to never call. I think this might have something to do with the fact that it's an async function but even when I wait for the full subscribe to finish it doesn't work.
.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);
}
and in my testbed I import HttpClientTestingModule.
error: Expected spy navigateToListVehicleComponent to have been called.
Anyone know what I'm doing wrong?