Перейти к содержимому

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

Testing

Тесты — это код, который проверяет другой код. Без тестов:

  • Ты боишься менять код (“а вдруг что-то сломается?”)
  • Баги находятся в продакшн, а не до деплоя
  • Рефакторинг превращается в рулетку
  • Новые разработчики боятся трогать legacy-код

С тестами:

  • Уверенность при изменениях
  • Баги находятся до пользователей
  • Документация поведения кода
  • Свобода рефакторинга
Не тестируй: Тестируй:
- Очевидный код - Бизнес-логику
- Библиотеки - Граничные случаи
- Фреймворки - Сложные вычисления
- API контракты
- UI взаимодействия
/\
/E2E\ ← медленные, дорогие, мало
/______\
/Integ. \ ← средняя скорость
/___________\
/ Unit Tests \ ← быстрые, дешёвые, много
/_______________\

Unit тесты (~70%): тестируют одну функцию/компонент изолированно
Integration тесты (~20%): тестируют взаимодействие нескольких частей
E2E тесты (~10%): тестируют полный пользовательский сценарий

ИнструментДля чего
JestUnit/Integration, самый популярный
VitestUnit/Integration, быстрее Jest, для Vite
React Testing LibraryТестирование React компонентов
PlaywrightE2E тесты в браузере
CypressE2E альтернатива
MSWMock 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);
});
});
  • Fast — выполняются быстро
  • Independent — не зависят друг от друга
  • Repeatable — одинаковый результат каждый раз
  • Self-validating — сами говорят прошли/не прошли
  • Timely — пишутся вместе с кодом (или до)
  1. Установи Jest или Vitest в любой проект
  2. Напиши первый тест для функции сложения двух чисел
  3. Запусти тест и убедись, что он проходит
  • Тесты — инвестиция, которая окупается при каждом изменении
  • Пирамида тестов: много unit, меньше E2E
  • AAA паттерн: Arrange, Act, Assert