我正在尝试对自定义 RxJS 运算符进行单元测试。操作符很简单,它使用 RetryWhen 重试失败的 HTTP 请求,但有延迟,只有在 HTTP Error 在 500 范围内时才会重试。使用 jasmine,这是在 Angular 应用程序中。
我看过这个:
不幸的是,更新 SpyOn 调用似乎并没有改变连续重试返回的 observable。每次重试时,它都会使用原始间谍值重试。
我还查看了一堆 rxjs 弹珠示例,但似乎都不起作用。我不确定是否可以在这里使用 rxjs 弹珠,因为(AFAIK)无法模拟您首先提交错误的 observable,然后在后续尝试中提交成功的 observable 的情况。
该代码基本上是这个的克隆: https ://blog.angularindepth.com/retry-failed-http-requests-in-angular-f5959d486294
export function delayedRetry(delayMS: number, maxRetry) {
let retries = maxRetry;
return (src: Observable<any>) =>
src.pipe(
retryWhen((errors: Observable<any>) => errors.pipe(
delay(delayMS),
mergeMap(error =>
(retries-- > 0 && error.status >= 500) ? of(error) : throwError(error))
))
);
}
我希望能够证明它可以订阅一个在第一次尝试时返回错误但随后返回成功响应的 observable。最终订阅应该显示 observable 发出的任何成功值。
提前感谢您的任何见解。