如果使用了RxJS的shareReplay运算符,则在mocha中测试未完成

时间:2018-05-18 08:43:53

标签: visual-studio-code rxjs mocha

我有一个简单的Javascript函数,它返回一个observable,我已将shareReplay运算符应用于参数1。

[![export function doStuffWithShareReplay() {
    return interval(100).pipe(
        shareReplay(1),
        tap(d => console.log('do stuff 1', d)),
        take(5)
    );
}

如果我将这个函数放在 mocha 测试中并从VSCode中运行它,那么测试的执行似乎永远不会完成,我必须手动停止测试执行。更确切地说,测试按预期通过,但VScode顶部中心的小控制板未关闭,我必须单击红色按钮将其关闭,如下图所示。如果我删除shareReplay,则执行按预期结束。我想知道这是什么行为的原因。

VSCode window

1 个答案:

答案 0 :(得分:2)

使用publishReplay(1)refCount()代替shareReplay(1)

return interval(100).pipe(
  publishReplay(1),
  refCount(),
  ...

自从RxJS 5.5(仍然存在于RxJS 6.1中)以来shareReplay(1)中存在一个错误,它阻止它从订阅源中取消订阅。

有关详细信息,请参阅此问题:https://github.com/ReactiveX/rxjs/issues/3336