BACK
Уроки48. Marble testing: проверка map и filter
Уроки · 48

48. Marble testing: проверка map и filter

Marble-тест проверяет поведение

Хороший marble-тест не повторяет реализацию. Он чётко говорит: «вот вход, вот ожидаемый выход — между ними должна быть нужная логика». Если логика поменялась — тест всё равно валиден.

Чтение строк

  • Вход -a-b-c-d-| = четыре значения через равные интервалы, потом завершение.
  • Выход ---x---y-| = только x и y, в тех же временных позициях, что прошедшие через фильтр исходные значения.
  • Позиция в строке важна: каждый символ соответствует одной и той же позиции виртуального времени.

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

  1. В pipe добавьте filter(value => value % 2 === 0), затем map(value => value * 10).
  2. Добавьте expectObservable(result$).toBe('---x---y-|', expectedValues);
  3. Установите assertionWritten = true;
Решение spoiler · click to reveal
const { map, filter } = Rx;

const sourceValues = { a: 1, b: 2, c: 3, d: 4 };
const expectedValues = { x: 20, y: 40 };

const source$ = cold('-a-b-c-d-|', sourceValues);

const result$ = source$.pipe(
  filter(value => value % 2 === 0),
  map(value => value * 10)
);

expectObservable(result$).toBe('---x---y-|', expectedValues);
assertionWritten = true;
script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...