Модульное тестирование приложения React с использованием Jest

Что такое модульное тестирование?

  • Модульное тестирование — это метод тестирования, который тестирует отдельную единицу программного обеспечения изолированно.
  • Модульное тестирование для приложений React означает тестирование отдельного компонента React.

«Модульное тестирование — это отличная дисциплина, которая может привести к снижению плотности ошибок на 40–80 %», — Эрик Эллиотт

Тестовая пирамида

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

Преимущества модульного тестирования

  1. Процесс становится гибким

Процесс Agile Testing является основным преимуществом модульного тестирования. Когда вы добавляете дополнительные функции в программное обеспечение, это может повлиять на старые проекты, и вам может потребоваться внести изменения в старый дизайн и код позже. Это может быть дорого и потребовать дополнительных усилий. Но если вы проводите модульное тестирование, весь процесс становится намного быстрее и проще.

2. Качество кода

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

3. Способствует изменениям

Рефакторинг кода или обновление системной библиотеки становится намного проще, если вы тестируете каждый компонент приложения по отдельности.

4. Плавная отладка

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

5. Снижение затрат

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

6. Действовать как лучшая форма документации

Модульные тесты сообщают вам, как первоначальные авторы намеревались использовать свой код. Прочтите модульные тесты, и вы узнаете, как авторы потребляют собственные продукты.

Рекомендации

  1. Используйте один тестовый файл для каждого компонента

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

2. Организуйте свои тесты с помощью describe и test/it.

Используйте describe для создания блоков, которые объединяют несколько связанных тестов, и используйте test или it. для выполнения отдельных тестовых случаев.

3. Настройка и сброс общих свойств в хуках beforeEach/afterEach

Используйте хуки beforeEach и afterEach, чтобы настроить общие коды для тестовых случаев и сбросить все макеты после ваших тестов.

4. Используйте схему «три А»

Arrange/Act/Assert (AAA) — это шаблон для организации модульных тестов. Он разбивает тесты на три четких и четких этапа:

  • Упорядочить: выполнить настройку и инициализацию, необходимые для теста.
  • Действовать: выполнить действия, необходимые для теста.
  • Утвердить: проверить результаты теста.

5. Также проверьте, чего не должно происходить

Обычно при написании тестов проверяется, что должна делать функция. Но вы должны проверять не только очевидное, но и крайние и отрицательные случаи.

6. Сделайте свои тесты детерминированными

Ваши тесты не должны зависеть друг от друга. Само собой разумеется, но для того, чтобы ваши тесты были детерминированными, вы должны убедиться, что ваши тесты не зависят друг от друга. Каждый тест-кейс должен быть независим от другого и должен проходить сам по себе.

7. Не дублируйте логику реализации

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

8. Запускайте тесты как часть развертывания

Запускайте набор тестов перед каждым развертыванием, чтобы убедиться, что вы случайно не нарушили какие-либо функции. Таким образом, вы можете гарантировать, что никакие ошибки не будут выпущены в тестовую/производственную среду для частей вашего приложения, которые уже покрыты тестами.

Демонстрационный репозиторий



Ссылки

Удачного модульного тестирования!!!