BACK
Уроки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, иначе сработает «защитная» проверка.

Что нужно сделать

  1. Внутри scheduler.run(...) допишите expectObservable(source$).toBe('a-b-|', values);
  2. На следующей строке: 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 // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...