Почему в документации по rxjs 6 marbles написано "-(abc)-|" завершается на 8 кадре?

Я читал документацию по тестированию мрамора для Rxjs 6 и нашел эту часть в разделе "Примеры" для "Синтаксиса мрамора"

https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/testing/marble-testing.md

Вот пример моего вопроса:

'-(abc)-|': на кадре 2 испустить a, b и c, затем на кадре 8 завершить

Почему сказано, что кадр 8 завершен?

Я считаю всего 5 кадров для указанной выше строки. Строка(abc)следует считать только одним кадром. Затем следует еще один кадр- затем полный |.

--(abc)-|
11  1  11 = sum(5)

Итак, я не понимаю, почему это фрейм 8, но когда я запускаю вышеупомянутое в модульном тесте с мраморами, он выводит, что он завершился в фрейме 8.

Так откуда берутся 3 дополнительных кадра?

1 ответ

Решение

Это сделано потому, что, когда событие находится за пределами круглых скобок, оно вычисляет фрейм только из своей строковой позиции. Я считаю, что основная причина в том, что вы все еще можете класть несколько мраморных диаграмм друг под друга, и они все еще легко читаются:

combineLatest([
  hot('-a--b-----c-d-e-|'),
  hot('--------f--g-h-i--j-|'),
  hot('--1--(234)---5-6---|'),
]);

Вы все еще можете легко сказать, когда 5будет выпущен. Если это сработало так, как вы ожидали, вам придется вручную вычесть кадры, чтобы определить,5 идет раньше d а также g например.

Это не очень очевидно из исходного кода, но он увеличивает количество кадров для каждого символа на диаграмме (advanceFrameBy(1) вызов):

https://github.com/ReactiveX/rxjs/blob/master/src/internal/testing/TestScheduler.ts

Другие вопросы по тегам