Как cделать тестирование кода более эффективным: принципы FIRST

Вспомним и разберем конкретные примеры тестирования компонентов React для каждого из принципов FIRST.

Как cделать тестирование кода более эффективным: принципы FIRST

В последнее время я все больше уделяю внимание юнит тестированию, что связано с моим наставничеством на Hexlet и выравнивание пирамиды на работе. И немного решил освежить основы при написании юнит тестов:

Быстрота (Fast)

Тесты должны выполняться очень быстро. Время выполнения, включая настройку, сам тест и завершение, должно составлять миллисекунды, так как в проекте может быть тысячи тестов.

Изоляция (Isolated/Independent)

Каждый тест должен быть независим. Он должен следовать модели "подготовка, действие, проверка" (Arrange, Act, Assert) без зависимости от других тестов или внешнего окружения.

Повторяемость (Repeatable)

Тесты должны давать одинаковые результаты в любой среде и в любое время, независимо от внешних условий, таких как дата/время или случайные значения.4

Самодостаточность (Self-Validating)

Результаты теста должны быть ясны без внешних проверок — тест либо проходит, либо нет, без всякой необходимости в дополнительной интерпретации.

Тщательность (Thorough/Timely)

Тесты должны охватывать все возможные сценарии использования и граничные условия, не ограничиваясь простым стремлением к 100% покрытию кода. Важно тестировать различные объемы данных, безопасность, и корректную обработку исключений.

Реальные примеры тестирования в React с использованием принципов FIRST

Давайте разберем конкретные примеры тестирования компонентов React для каждого из принципов FIRST.

1. Быстрота (Fast)

Плохой пример:

Этот тест медленный, потому что делает реальный запрос к API.
Этот тест медленный, потому что делает реальный запрос к API.

Хороший пример:

Здесь используется мок API, чтобы сделать тест быстрым и независимым от внешних сервисов.
Здесь используется мок API, чтобы сделать тест быстрым и независимым от внешних сервисов.

2. Изоляция (Isolated/Independent)

Плохой пример:

Состояние сохраняется между тестами
Состояние сохраняется между тестами

Хороший пример:

Здесь каждый тест использует свой экземпляр хука, гарантируя изоляцию.
Здесь каждый тест использует свой экземпляр хука, гарантируя изоляцию.

3. Повторяемость (Repeatable)

Плохой пример:

Этот тест даст разные результаты каждый день.
Этот тест даст разные результаты каждый день.

Хороший пример:

Фиксированная дата обеспечивает повторяемость результатов.
Фиксированная дата обеспечивает повторяемость результатов.

4. Самодостаточность (Self-Validating)

Плохой пример:

Тест не автоматизирован полностью и требует ручной проверки.
Тест не автоматизирован полностью и требует ручной проверки.

Хороший пример:

Этот тест полностью самодостаточен и не требует внешних действий для проверки.
Этот тест полностью самодостаточен и не требует внешних действий для проверки.

5. Тщательность (Thorough/Timely)

Плохой пример:

Тест ограничен только проверкой состояния загрузки.
Тест ограничен только проверкой состояния загрузки.

Хороший пример:

Эти тесты охватывают разные возможные состояния компонента, обеспечивая его тщательную проверку.
Эти тесты охватывают разные возможные состояния компонента, обеспечивая его тщательную проверку.
4
1 комментарий