Коротка відповідь
middleUnit‑тест — це перевірка окремого функціонального блоку коду, зазвичай однієї функції чи методу. У піраміді тестування unit‑тести становлять основу, охоплюючи близько 70–80 % тестового набору. Вони забезпечують швидку верифікацію логіки перед інтеграційними перевірками.
Повне пояснення
Що це і навіщо
Unit‑тест – це автоматизований перевірка окремого елемента програми (функція, метод, клас), що гарантує його коректну роботу в ізольованому середовищі. Вони допомагають швидко виявляти логічні помилки, підтримувати рефакторинг і забезпечують документацію поведінки коду.
Ключові принципи
- Ізоляція – тест не залежить від зовнішніх ресурсів (БД, мережі).
- Повторюваність – результат тесту однаковий при кожному запуску.
- Мінімальність – тест охоплює один аспект функціоналу.
- Читабельність – назва тесту описує очікуваний результат.
Як це працює
- Підготовка – створюються моки/стабіти для залежностей.
- Виконання – викликається функція/метод з тестовими даними.
- Перевірка – порівнюються фактичний і очікуваний результат.
- Звіт – тестове фреймворк видає успішний/неуспішний статус.
Практика і реалізація (JavaScript/TypeScript)
// sum.ts
export function sum(a: number, b: number): number {
return a + b;
}
// sum.test.ts
import { sum } from './sum';
test('sum adds two numbers', () => {
expect(sum(2, 3)).toBe(5);
});
Тестування: unit vs інші рівні
- Unit – 70–80 % тестового набору, швидкі.
- Integration – перевірка взаємодії між модулями, 10–20 %.
- E2E – повний сценарій користувача, 5–10 %.
Дизайн‑рішення
- Використовувати Jest або Vitest для швидкого запуску.
- Мокати зовнішні API через
jest.mockабоvi.fn().
Оптимізація
- Писати parameterized tests для різних вхідних даних.
- Уникати дублікації коду у
beforeEach/setup.
Часті помилки
- Тестування всього коду (integration в unit).
- Залежність від глобальних змінних.
- Неочікувані побічні ефекти (наприклад, зміна глобального стану).
- Відсутність моків для зовнішніх сервісів.
- Тести, що не повертають результат (наприклад,
returnпропущено). - Тести, що не очищають стан після виконання.
- Перевірка лише позитивних сценаріїв без негативних.
- Тести, що не документують очікувану поведінку (неякісні назви).
Cheatsheet
expect(value).toBe(expected)– строгий рівність.expect(value).toEqual(object)– глибоке порівняння.jest.fn()/vi.fn()– створення мок-функцій.
Follow‑up питання
- Як забезпечити ізоляцію unit‑тесту від зовнішніх сервісів?
- Які переваги має
vitestнадjestу контексті TS? - Як впровадити parameterized tests у Jest?