Модуль 8 · урок 1 з 9
Навіщо тести саме тут
У таблиці ліда обсяг названий точно: 2–3 тести дата-сервісів і 2 тести на валідацію, guards або пайпи. Разом пʼять. Це найдешевша ціль усього плану за співвідношенням зусиль і враження — і саме тому її не варто лишати на кінець.
Що насправді перевіряє лід
Не покриття й не кількість. Пʼять тестів показують три речі, які важко продемонструвати інакше:
- Що ти вмієш зафіксувати поведінку кодом. Не «у мене працює», а «ось перевірка, запусти сам».
- Що твій код узагалі тестований. Якщо логіка розмазана по компонентах і зашита
в сервіси через
new, написати тест неможливо — і це видно одразу. - Що ти розумієш, що саме варто перевіряти. Тест на геттер каже про людину більше, ніж відсутність тестів.
Найважчу частину ти вже зробив. Протягом плану логіка навмисно виносилась у чисті функції:
applyState з модуля 5, compareBy звідти ж, валідатори з модуля 6,
pickState з модуля 7. Кожна з них тестується трьома рядками без Angular взагалі.
Лишилось написати ці рядки.
Karma, Jasmine і що з ними сьогодні
| Що це | Роль |
|---|---|
| Jasmine | Мова тестів: describe, it, expect, спаї |
| Karma | Запускач: піднімає браузер, збирає результати |
| TestBed | Частина Angular: створює тестове середовище з DI |
Важлива деталь про сучасний стан: Karma офіційно позначено застарілим, і Angular CLI
рухається до Vitest як запускача. Але мова тестів лишається та сама — describe,
it, expect виглядають однаково. Тобто те, що ти вивчиш тут,
не застаріє: зміниться інструмент запуску, а не спосіб писати тести.
ng test # запустити з переглядом змін
ng test --watch=false # один прогін — так це працює в CI
ng test --code-coverage # із покриттям
ng test --include='**/task-store.spec.ts' # лише один файл
Піраміда, про яку варто знати
Що саме напишемо
| № | Що тестуємо | Урок | Складність |
|---|---|---|---|
| 1 | Пайп форматування | 4 | Найпростіший — з нього й почнемо |
| 2 | Функціональний guard | 4 | Проста, якщо логіка чиста |
| 3 | Стор: емісії й мутації стану | 5 | Головний тест, найцінніший |
| 4 | Синхронний валідатор | 6 | Проста |
| 5 | Асинхронний валідатор | 6 | Найцікавіша: тут потрібен fakeAsync |
«Покриття я не ганявся: воно легко накручується тестами, які нічого не перевіряють. Натомість покрив те, де логіка справді є — фільтрацію й сортування списку, стан стору й валідатори. Це чисті функції, тому тести короткі й не ламаються від рефакторингу верстки.»