Модуль 15 · Урок 56

Test strategy, deterministic unit tests і Vitest

Автотест має закривати конкретний risk найдешевшим trustworthy layer. Кількість tests і coverage не є ціллю без failure mode, observable contract та explicit gaps.

Risk strategyVitestAAAMock boundary

Від ризику до шару

RiskLayer
Invalid data shapeUnit boundary test
Form/user flowComponent integration
Real browser layout/focusBrowser/E2E
Production percentileField monitoring

Static/type/unit/integration/E2E layers доповнюють одне одного. Обирайте boundary, empty, invalid, equivalence і transition cases; не дублюйте той самий low-value happy path на кожному рівні.

Deterministic Vitest gate

test('stock filter excludes unavailable books', () => { expect(filterBooks(books, '', true)).toEqual([books[0]]); });

Arrange–Act–Assert має незалежний setup і observable assertion. Контролюйте time/random/network, reset mocks/DOM, не покладайтеся на order, не залишайте .only. Mock ставте на external boundary; product logic і runtime validator лишайте real.

Coverage — карта, не доказ

Зберігайте gap register: line executed не означає, що правильний outcome перевірений.

Практика

Пройдіть unit partitions, invalid fixtures, deterministic retry boundary і coverage/gaps review; виконайте vitest run як non-watch CI command.

Офіційні джерела

Практична перевірка · урок 56 з 60

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. З чого починається test strategy?
2. Що найдешевше перевіряє pure filter function?
3. Що означає AAA?