Я написал модульный тест для этой функции:
getCarsAndSetup(){
this.getCars();
this.getFactoryInfo();
}
Это функция getCars ():
getCars() {
const subscription = this.carDetailsService.getAll().subscribe((carDetails) => {
this.carInfoService.setCars(carDetails);
subscription.unsubscribe(); <-------------- Here the
subscription is undefined
when running the test,
however when running
the app, the subscription
is defined and
everything is fine
});
}
Это модульный тест:
fdescribe('getCarsAndSetup', () => {
it('should get cars and set them up', () => {
component.getFactoriesAndUnsubscribe();
spyOn(component, "getCars");
spyOn(component, "getFactoryInfo");
expect(component.getCars).toHaveBeenCalled();
expect(component.getFactoryInfo).toHaveBeenCalled();
});
});
Я использую макет для carDetailsService. Это метод getAll () в макете carDetailsService:
getAll(): Observable<CarModel[]> {
return Observable.create((observer:any) => {
observer.next([]);
});
}
И это тот же метод в РЕАЛЬНОМ carDetailsService:
getAll(): Observable<CarModel[]> {
return this.http.get<CarModel[]>(this.carUrl);
}
Проблема в том, что когда я запускаю само приложение, определяется подписка в методе getCars (), я могу отписаться от него и т. Д., И все в порядке.
Однако, когда я запускаю тесты, этот тест не проходит, потому что по какой-то причине подписка не определена в функции getCars (), когда я пытаюсь отписаться от нее.
В чем может быть причина того, что подписка не определена только при запуске теста? Может быть, это как-то связано с тем, как я высмеивал функцию getAll () carDetailsService?