Модуль 15 · Урок 56
Test strategy, deterministic unit tests і Vitest
Автотест має закривати конкретний risk найдешевшим trustworthy layer. Кількість tests і coverage не є ціллю без failure mode, observable contract та explicit gaps.
Від ризику до шару
| Risk | Layer |
|---|---|
| Invalid data shape | Unit boundary test |
| Form/user flow | Component integration |
| Real browser layout/focus | Browser/E2E |
| Production percentile | Field 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.
Офіційні джерела
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.