Выбор ответа Middle Тестирование обновлено

Тестировать поведение, а не реализацию

Вопрос

Какой тест компонента корзины устойчивее к рефакторингу?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Кликнуть «В корзину» и проверить, что виден «Товаров: 1». Тест через видимый результат проверяет то, что важно пользователю.

Варианты ответа

  1. Проверить, что после клика внутренний state items содержит товар
  2. Проверить, что метод addItem компонента вызван ровно один раз
  3. Сделать snapshot всей разметки корзины сразу после клика
  4. Кликнуть «В корзину» и проверить, что виден «Товаров: 1»правильный ответ

Разбор

Тест через видимый результат проверяет то, что важно пользователю. Можно переписать state на useReducer или Zustand, и тест останется зелёным.

  • State и внутренние методы это детали реализации: при рефакторинге тест упадёт, хотя поведение правильное.
  • Snapshot ломается от любого изменения разметки, даже класса, и его часто обновляют не глядя.

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

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