我正在尝试对自定义 RxJS 运算符进行单元测试。该运算符非常简单,它使用 RetryWhen 重试失败的 HTTP 请求,但有延迟,并且仅当 HTTP Error 在 500 范围内时才会重试。使用 jasmine,这是在 Angular 应用程序中。
我看过这个:
不幸的是,更新 SpyOn 调用似乎不会更改连续重试时返回的可观察值。每次重试时,都会使用原始间谍值重试。
我还查看了一堆 rxjs 大理石示例,但似乎都不起作用。我不确定这里是否可以使用 rxjs 弹珠,因为(AFAIK)无法模拟首先提交错误的可观察值,然后在后续尝试中提交成功的可观察值的情况。
该代码基本上是此代码的克隆: 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))
))
);
}
Run Code Online (Sandbox Code Playgroud)
我希望能够证明它可以订阅一个可观察的对象,该可观察对象在第一次尝试时返回错误,但随后返回成功的响应。最终订阅应该显示 observable 发出的任何成功值。
预先感谢您提供任何见解。