Вызвать ошибку с rxjs внутри моих тестовых заглушек - PullRequest
1 голос
/ 14 марта 2019

У меня есть сервис, который выглядит так

public getData(): Observable<Data> {
    return this.http
        .get<Data>(url)
        .pipe(
            tap(res => res),
            (e: any) => e);
}

Я не могу использовать оператор catchError ( Ошибка обработки с rxjs, несовместимым с перехватчиками )

В компоненте я подписываюсь на него и он выдает ошибку при необходимости

this.service.getData().subscribe(res => {
  myProp = true;
}, (error) => {
  if (error.errorMessage === 'xxx') {
    myProp = false;
  }
});

Чтобы проверить это, я создал заглушку (которая раньше работала с catchError)

export class ServiceStub {
    public getData(): Observable<Data> {
        return of({errorMessage: 'some error'});
    }
}

Этот код возвращается внутри подписки как 'res', но не в обратном вызове ошибки подписки.

Я пытался Throw new Error('some error'), но мне нужно вернуть объект.

Я также пытался throw({errorMessage: 'some error'}), но проверка не удалась с

[объект Объект] брошенный

1 Ответ

1 голос
/ 14 марта 2019

Вы можете использовать оператор throwError.Для получения дополнительной информации, проверьте документы

Измените заглушку на этот

import { throwError } from 'rxjs';

export class ServiceStub {
    public getData(): Observable<Data> {
        return throwError({errorMessage: 'some error'});
    }
}

Или вы можете использовать конструктор Observable следующим образом

getData() {
  return new Observable(observer => {
    observer.error({errorMessage: 'some error'});
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...