У меня возникли проблемы со сценариями ошибок при тестировании спецификаций компонентов из моего класса обслуживания. Класс обслуживания имитируется с помощью ts-mockito.
Класс обслуживания:
export class MyService {
getData(): Observable<any> {
/* return httpClient.get(...) */
}
}
Я упростил логику, которая не работает в моем тесте компонента, до этой простой репликации (в моем реальном тесте компонент вызывает службу, а не тестовый код, но это воспроизводит то, что я испытываю):
it('should return an error response', () => {
const httpErrorResponse = new HttpErrorResponse({
error: { msg: 'Not allowed' },
status: 400,
statusText: 'Forbidden',
});
const mockTestService = mock(MyService);
when(mockTestService.getData()).thenReturn(of(httpErrorResponse));
const mockInstance = instance(mockTestService);
mockInstance.getData().subscribe(
(success) => console.log('success'), /* <= this is what I get */
(err) => console.log('error') /* <= this is what I want */
);
});
Однако вывод здесь — «успех», а не «ошибка». Как настроить наблюдаемый ответ от макета, чтобы вызвать состояние ошибки в подписке?
Я также пробовал when(mockTestService.getData()).thenReject(httpErrorResponse)
, но это выдает необработанный отказ от обещания.