Я не уверен, как обрабатывать исключения с параметрами URL в Angular 6. Сейчас моя служба выдает Error
, когда идентификатор URL не может быть найден.В реальном приложении мне нравится, что ошибка всплывает, чтобы ее можно было поймать и зарегистрировать, но в моих тестах с жасмином это приводит к неудаче теста:
HeroDetailComponent should navigate to not found page
[object ErrorEvent] thrown
Я пробовал различные блоки try {} catch () {}
и catchError
конвейеры для обработки ошибки в жасмине, но, кажется, ничто не может перехватить эту ошибку после ожидаемого выполнения теста.
Демонстрация проблемы: https://angular -observable-catch.stackblitz.io/
Обратите внимание, что при работе со стекаблицем тест не дает сбоя, но он выполняется локально при запуске в моем приложении с использованием ng test
.
. В (главной) консоли обратите внимание на ошибку:
Uncaught Error: Hero 999 not found.
at HeroService.getHeroById (hero.service.ts:33)
at SwitchMapSubscriber.eval [as project] (hero-detail.component.ts:46)
at SwitchMapSubscriber._next (switchMap.ts:103)
at SwitchMapSubscriber.Subscriber.next (Subscriber.ts:104)
at ReplaySubject.Subject.next (Subject.ts:62)
at ReplaySubject.nextInfiniteTimeWindow (ReplaySubject.ts:42)
at ActivatedRouteStub.setParamMap (activated-route-stub.ts:56)
at UserContext.eval (hero-detail.component.spec.ts:65)
at ZoneDelegate.invoke (zone.js:388)
at ProxyZoneSpec.onInvoke (zone-testing.js:288)
Исходный код для демонстрации: https://stackblitz.com/edit/angular-observable-catch?file=src%2Fapp%2Fhero%2Fhero-detail.component.spec.ts
Как отловить эту ошибку в моих тестах с жасмином, чтобы она не вызвала Uncaught Error?
Обновление
Я выяснил, что это вызвано подпиской AsyncPipe , которая выдает любые ошибки Наблюдаемые / Обещания / и т.д.