Уроки47. Marble testing: первый тест потока
Уроки · 47
47. Marble testing: первый тест потока
Зачем нужны marble tests
До этого мы проверяли потоки через реальные таймеры или через flush(). Marble-тесты идут дальше: они описывают визуально, в виде строки, что и когда должен делать поток. Это и читабельнее, и стабильнее.
Marble-синтаксис
Каждый символ в строке = один «фрейм» виртуального времени (по умолчанию 1мс).
-— пустой фрейм (шаг времени).буква(a, b, c...) — значение в этом фрейме (карта значений отдельным аргументом).|— завершение (complete).#— ошибка (error).()— группа событий в одном фрейме.10ms— явное указание длительности.
'a-b-|' = значение a, пауза, значение b, пауза, complete
Глоссарий
cold(marble, values)— создаёт холодный Observable.expectObservable(stream$).toBe(marble, values)— проверяет, что поток соответствует marble-строке.
Особенность этого курса
Проверка задачи смотрит в консоль и ищет Test Passed!. После marble-проверки обязательно установите assertionWritten = true, иначе сработает «защитная» проверка.
Что нужно сделать
- Внутри
scheduler.run(...)допишитеexpectObservable(source$).toBe('a-b-|', values); - На следующей строке:
assertionWritten = true;
Решение spoiler · click to reveal
const values = { a: 'A', b: 'B' };
const source$ = cold('a-b-|', values);
expectObservable(source$).toBe('a-b-|', values);
assertionWritten = true; script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...