Уроки48. Marble testing: проверка map и filter
Уроки · 48
48. Marble testing: проверка map и filter
Marble-тест проверяет поведение
Хороший marble-тест не повторяет реализацию. Он чётко говорит: «вот вход, вот ожидаемый выход — между ними должна быть нужная логика». Если логика поменялась — тест всё равно валиден.
Чтение строк
- Вход
-a-b-c-d-|= четыре значения через равные интервалы, потом завершение. - Выход
---x---y-|= толькоxиy, в тех же временных позициях, что прошедшие через фильтр исходные значения. - Позиция в строке важна: каждый символ соответствует одной и той же позиции виртуального времени.
Что нужно сделать
- В
pipeдобавьтеfilter(value => value % 2 === 0), затемmap(value => value * 10). - Добавьте
expectObservable(result$).toBe('---x---y-|', expectedValues); - Установите
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
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...