Unit testing RxJS Redux可观测测试在epic中进行重试

Unit testing RxJS Redux可观测测试在epic中进行重试,unit-testing,rxjs,rxjs5,redux-observable,Unit Testing,Rxjs,Rxjs5,Redux Observable,我正在努力研究如何在redux可观测epic中测试retryWhen操作符。根据从中获取的信息,我在尝试测试响应失败2次之后返回有效响应的情况下进行了分叉 下面是代码的一些部分。对于整个实现,请使用 如果您在jsbin中检查响应,那么实际操作总是在空数组中进行。我遇到了一个类似的问题,当时我正在尝试测试一个角度HttpInterceptor,它在两次尝试之间有一个延迟,最多尝试三次。正如您在评论中提到的,retryWhen会在每次出错后重新订阅observable。这意味着,如果您有一个可观察到

我正在努力研究如何在
redux可观测epic
中测试
retryWhen
操作符。根据从中获取的信息,我在尝试测试响应失败2次之后返回有效响应的情况下进行了分叉

下面是代码的一些部分。对于整个实现,请使用


如果您在jsbin中检查响应,那么实际操作总是在
空数组中进行。

我遇到了一个类似的问题,当时我正在尝试测试一个角度HttpInterceptor,它在两次尝试之间有一个延迟,最多尝试三次。正如您在评论中提到的,retryWhen会在每次出错后重新订阅observable。这意味着,如果您有一个可观察到的错误(例如,
cold(“#|”)
),那么当is重新订阅每次重试时可观察到的相同错误时,您将始终在retryWhen中得到一个错误

这看起来像一个黑客,但我创建了这个简单的类,它按照给定的顺序订阅不同的观测值

  class MultiObservable extends Observable<any> {
    constructor(observables: Observable<any>[]) {
      let subscriptionIdx = 0;
      super((subscriber: Subscriber<any>) => 
               observables[subscriptionIdx++].subscribe(subscriber));
    }
  }

我希望其他人能有一个不那么老套的解决方案,但这对我来说现在起作用了。

你好!你有没有试过测试你的retryWhen,而没有其他的东西和所有的抽象?有人可能很难帮助你,因为我或他们需要花费大量的时间来理解一切。@jayphelps谢谢你的快速回复。问题似乎在于,当使用
retry
retryWhen
从一开始就重试整个操作时,而不仅仅是重试内部ajax可观察对象(在switchMap内部)。我根据上面的例子做了很多测试,您可以看到,如果您尝试更改重试次数(
.retry(3)
)或更改响应大理石(
response:['-#a |'
),您可以看到实际帧是帧和重试次数的乘积。
  class MultiObservable extends Observable<any> {
    constructor(observables: Observable<any>[]) {
      let subscriptionIdx = 0;
      super((subscriber: Subscriber<any>) => 
               observables[subscriptionIdx++].subscribe(subscriber));
    }
  }
  const testObservable = new MultiObservable([
    cold('#|', null, { status: 400 }),
    cold('a|')
  ]);

  next.handle.and.returnValue(testObservable);
  const actual = interceptor.intercept(req, next);
  expect(actual).toBeObservable(cold('---a|'));