Чем отличаются типы тестирования и как это влияет на код?
Продвинутые темы
Тесты делятся на уровни — модульные (unit), интеграционные, end-to-end (E2E) — плюс специализированные виды. Разные уровни ловят разные ошибки и влияют на стиль кода.
Пирамида тестирования
Unit (модульные)
Проверяют отдельную функцию/компонент в изоляции. Быстрые, многочисленные.
expect(sum(2, 3)).toBe(5);Инструменты: Jest, Vitest.
Integration (интеграционные)
Проверяют взаимодействие нескольких модулей (компонент + хук + API-мок).
Инструменты: Testing Library.
E2E (сквозные)
Проверяют весь сценарий в реальном браузере, как пользователь. Медленные, но реалистичные.
Инструменты: Playwright, Cypress.
Специализированные виды
- Снапшот — фиксируют разметку/вывод.
- Регрессионные визуальные — сравнивают скриншоты.
- Нагрузочные / производительность.
- Contract-тесты — согласованность API.
Как влияет на код
Тестируемость подталкивает к чистым функциям, слабой связанности, инъекции зависимостей — код становится модульнее.
Пирамида
Много быстрых unit, меньше интеграционных, ещё меньше медленных E2E.
Коротко для собеседования
Уровни: unit (изолированные функции, быстро), integration (взаимодействие модулей), E2E (полный сценарий в браузере, медленно). Плюс снапшоты, визуальные, нагрузочные. Пирамида: много unit, мало E2E. Тестируемость улучшает архитектуру.