Ответ вслух Junior Тестирование обновлено

Пирамида тестирования

Вопрос

Какие тесты писать фронтенду и в каком соотношении?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Много быстрых юнит-тестов на чистую логику; заметно меньше интеграционных - рендер экрана с подменённой сетью, проверка сценария глазами пользователя; и единицы e2e на то, потеря чего стоит денег: регистрация, оплата, оформление. Причина пропорции - цена: e2e медленные, зависят от окружения и нестабильны.

Что должно прозвучать в ответе

  • юнит - на чистую логику: утилиты, редьюсеры, форматтеры

  • интеграционные - на сценарий экрана с замоканной сетью

  • e2e - единицы, только критические пути

  • e2e дороже: медленные, нестабильные, требуют окружения

  • мера полезности - не покрытие в процентах, а пойманные регрессии

  • тест на реализацию ломается при рефакторинге и не ловит багов

Что могут спросить следом

  • Что тестировать в React-компоненте, а что нет
  • Почему высокое покрытие не равно качеству
  • Как бороться с нестабильными e2e

Разбор

Много быстрых юнит-тестов на чистую логику; заметно меньше интеграционных - рендер экрана с подменённой сетью, проверка сценария глазами пользователя; и единицы e2e на то, потеря чего стоит денег: регистрация, оплата, оформление.

Причина пропорции - цена: e2e медленные, зависят от окружения и нестабильны. Десять минут красного CI из-за плавающего e2e приводят к тому, что тесты перестают читать.

Про покрытие честный ответ: процент - плохая цель. 100% покрытия геттеров не ловят ничего, а один тест на расчёт скидки экономит инцидент. Меряю пользу количеством пойманных регрессий.

И главное правило: тест проверяет поведение, а не реализацию. Тест, знающий про внутреннее состояние, ломается при рефакторинге - и его начинают удалять вместо починки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.