1. Введение в тестирование

Зачем тестировать код?
Заголовок раздела «Зачем тестировать код?»Тесты — это код, который проверяет другой код. Без тестов:
- Ты боишься менять код (“а вдруг что-то сломается?”)
- Баги находятся в продакшн, а не до деплоя
- Рефакторинг превращается в рулетку
- Новые разработчики боятся трогать legacy-код
С тестами:
- Уверенность при изменениях
- Баги находятся до пользователей
- Документация поведения кода
- Свобода рефакторинга
Что тестировать?
Заголовок раздела «Что тестировать?»Не тестируй: Тестируй:- Очевидный код - Бизнес-логику- Библиотеки - Граничные случаи- Фреймворки - Сложные вычисления - API контракты - UI взаимодействияПирамида тестов
Заголовок раздела «Пирамида тестов» /\ /E2E\ ← медленные, дорогие, мало /______\ /Integ. \ ← средняя скорость /___________\ / Unit Tests \ ← быстрые, дешёвые, много /_______________\Unit тесты (~70%): тестируют одну функцию/компонент изолированно
Integration тесты (~20%): тестируют взаимодействие нескольких частей
E2E тесты (~10%): тестируют полный пользовательский сценарий
Инструменты экосистемы
Заголовок раздела «Инструменты экосистемы»| Инструмент | Для чего |
|---|---|
| Jest | Unit/Integration, самый популярный |
| Vitest | Unit/Integration, быстрее Jest, для Vite |
| React Testing Library | Тестирование React компонентов |
| Playwright | E2E тесты в браузере |
| Cypress | E2E альтернатива |
| MSW | Mock Service Worker (API моки) |
Анатомия теста
Заголовок раздела «Анатомия теста»// Arrange → Act → Assert (AAA паттерн)
describe('calculateTotal', () => { it('should add item prices correctly', () => { // Arrange: подготовить данные const items = [ { name: 'Apple', price: 1.5 }, { name: 'Bread', price: 2.0 }, ];
// Act: выполнить действие const total = calculateTotal(items);
// Assert: проверить результат expect(total).toBe(3.5); });});Хорошие тесты (FIRST)
Заголовок раздела «Хорошие тесты (FIRST)»- Fast — выполняются быстро
- Independent — не зависят друг от друга
- Repeatable — одинаковый результат каждый раз
- Self-validating — сами говорят прошли/не прошли
- Timely — пишутся вместе с кодом (или до)
Практические задания
Заголовок раздела «Практические задания»- Установи Jest или Vitest в любой проект
- Напиши первый тест для функции сложения двух чисел
- Запусти тест и убедись, что он проходит
- Тесты — инвестиция, которая окупается при каждом изменении
- Пирамида тестов: много unit, меньше E2E
- AAA паттерн: Arrange, Act, Assert