Как проверить наблюдаемые, которые генерируют сгруппированные события с rxjs мраморами? - PullRequest
0 голосов
/ 18 мая 2018

Согласно документации rxjs marbles текущее поведение для групп синхронизации следующее:

'(ab)-(cd)': on frame 0, emits a and b then on frame 50, emits c and d

Из документов:

Хотя это можетвначале не быть интуитивно понятным, после того как все значения будут синхронно выданы, время будет прогрессировать число кадров, равное количеству символов ASCII в группе, включая круглые скобки

Хорошо, но как проверитьможно наблюдать вот так (используя шарики или любую другую технику):

const observable$ = of(1, 2).concat(of(3, 4).delay(20));

Есть ли обходные пути?

Есть похожий вопрос о переполнении стека, нонет ответа на вопрос «Как на самом деле обойти это и проверить этот вид наблюдаемого».

Спасибо!

Ответы [ 2 ]

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

Для моего проекта я перешел на rx-sanbox , где группировка синхронизации работает правильно, и это решило мою проблему.

Итак, в rx-sandbox это правильно: '(ab)-(cd)': on frame 0, emits a and b then on frame 20, emits c and d

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

Я не знаю, какую версию RxJS вы используете, потому что вы смешиваете прототипные и переносимые операторы, но это похоже на RxJS 5.5.

В RxJS 5.X это немного неуклюже.Вы можете переписать свой тест следующим образом:

import { of } from 'rxjs/observable/of';
import { TestScheduler } from 'rxjs/testing/TestScheduler';
import { assert } from 'chai';
import 'rxjs/add/operator/concat';
import 'rxjs/add/operator/delay';

const scheduler = new TestScheduler((actual, expected) => {
  console.log(actual, expected);
  return assert.deepEqual(actual, expected);
});

const observable$ = of('a', 'b').concat(of('c', 'd').delay(50, scheduler));

scheduler
  .expectObservable(observable$)
  .toBe('(ab)-(cd|)');

scheduler.flush();

См. Демонстрацию в режиме реального времени (открытая консоль): https://stackblitz.com/edit/rxjs5-marble-test?file=index.ts

Вы знаете, что этот тест пройден, потому что он не выдает никакой ошибки.Попробуйте изменить любое из задержек или значений next выбросов, и оно выдаст ошибку.

Также взгляните на этот ответ: Как проверить функцию, которая возвращает наблюдаемое, используя timedинтервалы в rxjs 5?

Однако я настоятельно рекомендую обновить до RxJS 6, потому что это упрощает все с cold и hot функциями «создания», где вы можете просто использовать const observable$ = cold('(ab)-(cd|)') создать ту же последовательность, что и вы с of(...).concat(...).

Тестирование в RxJS 6:

...