Я новичок в угловом тестировании и пытаюсь выяснить, как написать тест, который воспроизводит ответ об ошибке функции HttpClient.get (). По сути, мой сервис имеет как map (), так и catchError () внутри своего pipe (), и я хотел бы изучить оба потока. Вот что у меня есть:
my.service.ts:
getItems(): Observable<ItemViewModels[]> {
return
this.httpClient.get<any>(this.getItemsUrl)
.pipe(
map(json => {
return json.map(itemJson => this.getVmFromItemJson(itemJson));
}),
catchError(() => {
// Log stuff here...
return of(null);
})
);
}
my.service.spec.ts:
it('should catch error and return null if API returns error', () => {
spyOn(service.httpClient, 'get').and.returnValue(new Observable()); // Mock error here
service.getItems().subscribe($items => expect($items).toBe(null));
});
it('should return valid view model array if API returns a valid json', () => {
const mockResponse = [
new SideNavItemViewModel(1),
new SideNavItemViewModel(2),
new SideNavItemViewModel(3)
];
spyOn(service.httpClient, 'get').and.returnValue(of(JSON.stringify(mockResponse)));
service.getSidenavViewModel().subscribe(x => expect(x).toBe(mockResponse));
});
Таким образом, фактическая проблема заключается в том, что наблюдаемые объекты, которые я высмеиваю, чтобы httpClient возвращался при получении в модульных тестах, похоже, не попадают в функцию .pipe (), что означает, что мои тесты не работают :(
Есть идеи?
Спасибо!