我正在为我的角度应用程序创建自定义错误处理程序。
我有这个组件调用服务方法,该方法执行http请求并返回一个可观察的对象。在返回的可观察对象上,我添加了一个带有 map 运算符的管道(在成功的情况下会做一些事情),然后 catchError 处理该错误并最终将其重新抛出,最后 subscribe()为空,因此我的自定义错误处理程序获取了错误并将其记录下来。
该应用程序正常运行,错误处理按预期运行。我的问题是我为该组件编写的测试。第一次运行正常,但是在文件中进行任何更改后,测试运行都会失败,并显示以下消息:
Chrome 73.0.3683 (Windows 10.0.0) ERROR { "message": "An error was thrown in afterAll\nUncaught [object Object] thrown", "str": "An error was thrown in afterAll\nUncaught [object Object] thrown" }
Chrome控制台输出:
此后,测试不再运行,仅显示消息
显示WARN [karma]: No captured browser, open http://localhost:9876/
。
我知道问题是由于catchError
+ throwError
引起的。当我添加.subscribe(() => {}, (err) => {});
时,测试运行正常,但是自定义错误处理不再收到该错误。
这是代码为https://gist.github.com/emilio2hd/75a54286e45ca7def85f4a71967ade90
的链接我不确定这种策略是否正确,但是我不想为每个订阅注入并调用某种错误处理服务或函数。
还是谢谢你!