testing

Тестирование: unit/integration/e2e, выбор фреймворка (pytest/Jest/Vitest/Playwright), TDD,覆盖率

SKILL.md

GitHub

Testing

Гайд по тестированию программного обеспечения.

Типы тестов (пирамида)

Уровень Инструмент Объём
Unit pytest (Python), Jest/Vitest (JS) Больше всего
Integration pytest + апи-клиент, supertest Средне
E2E Playwright / Cypress Мало

Чек-лист

Выбор и настройка

  • Unit: pytest (Python) / Vitest или Jest (JS/TS)
  • E2E: Playwright (рекомендуется, кроссплатформенный)
  • Отдельная команда запуска, CI-интеграция

Unit-тесты

  • Тестируй одну единицу изолированно (мок зависимостей)
  • Граничные случаи и ветвления
  • Тест имени — test_<что>_<при_каком_условии>_<ожидание>
  • Не тестируй реализацию, тестируй поведение

Интеграционные

  • Проверяй контракты между модулями/сервисами
  • Тестовая БД отдельно от прода (фикстуры + откат)
  • Реальные вызовы API, не только моки

E2E

  • Сценарии пользовательских путей (логин → действие → результат)
  • Стабильные селекторы (data-testid)
  • Изолированное окружение и детерминированность

Качество тестов

  • Быстрые в прогоне (unit < 100мс)
  • Независимы (без общего состояния между тестами)
  • Детерминированы (без флапи по времени/случайности)
  • Покрывают критичную логику, а не гонятся за 100% покрытия

Правила

  1. Пиши тест на баг до фикса (red → green).
  2. Не дублируй покрытие по уровням — сбалансируй пирамиду.
  3. Тесты — это код: читаемые, поддерживаемые, рефакторимые.
  4. Flaky-тест хуже отсутствия теста — чини или убирай.