Тест в mocha не завершается, если используется оператор RxJS shareReplay - PullRequest
0 голосов
/ 18 мая 2018

У меня есть простая функция Javascript, которая возвращает наблюдаемую, к которой я применил оператор shareReplay с параметром 1.

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

Если я поместил такую ​​функцию в мокко протестируйте и запустите его из VSCode, кажется, что выполнение теста никогда не завершается, и мне приходится останавливать выполнение теста вручную.Точнее, тест проходит, как и ожидалось, но небольшая панель управления в верхнем центре VScode не закрыта, и я должен нажать на красную кнопку, чтобы закрыть ее, как вы можете видеть на следующем рисунке.Если я удаляю shareReplay, выполнение заканчивается, как и ожидалось.Мне интересно, что является причиной поведения.

VSCode window

1 Ответ

0 голосов
/ 18 мая 2018

Используйте publishReplay(1) и refCount() вместо shareReplay(1):

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

Существует ошибка в shareReplay(1) начиная с RxJS 5.5 (которая все еще существует в RxJS 6.1), которая не позволяет ей отписаться отего источник.

Подробнее см. в этом выпуске: https://github.com/ReactiveX/rxjs/issues/3336

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...