Bri*_*ian 3 unit-testing rxjs retrywhen
我正在尝试对自定义 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 发出的任何成功值。
预先感谢您提供任何见解。
尝试使用这个可观察量作为源可观察量来测试
const source = (called,successAt)=>{
return defer(()=>{
if(called<successAt){
called++
return throwError({status:500})
}
else return of(true)
})
}
Run Code Online (Sandbox Code Playgroud)
测试
this.delayedRetry(1000,3)(source(0,3)).subscribe()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |