【发布时间】:2019-02-25 05:45:19
【问题描述】:
我不确定如何在 Angular 6 中处理带有 URL 参数的异常。现在,当找不到 URL id 时,我的服务会抛出 Error。在实际应用中,我喜欢错误冒泡以被捕获和记录,但在我的 jasmine 测试中会导致测试失败:
HeroDetailComponent should navigate to not found page
[object ErrorEvent] thrown
我尝试了各种 try {} catch () {} 块和 catchError 管道来处理 jasmine 中的错误,但在测试预期运行后似乎没有任何东西能够捕获此错误。
问题演示:https://angular-observable-catch.stackblitz.io/
请注意,在 stackblitz 上测试不会失败,但在我的应用程序中使用 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)
如何在我的 jasmine 测试中捕捉到这个错误,以免它导致未捕获的错误?
更新
我发现这是由 AsyncPipe subscription 引起的,它会引发 Observable/Promise/etc 的任何错误。
【问题讨论】:
标签: angular jasmine observable