Почему в документации по 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