Это будет краткое руководство по использованию Jest
и Enzyme
для модульного тестирования React
компонентов. Модульное тестирование может показаться сложным для новичков, но на самом деле это не так сложно, как может показаться. Успешное выполнение тестов может помочь в достижении целей разработки и дизайна, которые могут еще больше раскрыть потенциал вашего приложения и вашей команды.
Jest
используется Facebook для тестирования всего кода JavaScript, включая приложения React. Одна из философий Jest заключается в предоставлении интегрированного опыта с «нулевой конфигурацией». Мы заметили, что когда инженерам предоставляются готовые инструменты, они в конечном итоге пишут больше тестов, что, в свою очередь, приводит к созданию более стабильных и здоровых кодовых баз.
Enzyme
- это утилита для тестирования JavaScript для React, которая упрощает утверждение, управление и просмотр выходных данных компонентов React. API-интерфейс Enzyme должен быть интуитивно понятным и гибким, имитируя API-интерфейс jQuery для управления и обхода DOM.
Начиная
Давайте начнем.
Во-первых, давайте создадим каталог для размещения всех наших файлов. В вашем терминале сделайте следующее:
mkdir <directory_name> cd <directory_name>
Теперь давайте создадим приложение для реагирования, используя create-react-app
.
Если у вас не установлен create-react-app
, выполните в терминале следующие действия:
npm install -g create-react-app
Оказавшись внутри вашего вновь созданного каталога, с помощью терминала введите следующее:
create-react-app <appname>
Помните, что имя приложения ДОЛЖНО быть строчными.
Во всех смыслах и целях этого урока я буду использовать имя jest_enzyme_tutorial
.
create-react-app jest_enzyme_tutorial
После создания приложения cd
в новое приложение React.
Установка Jest и Enzyme
Теперь мы собираемся установить Jest
и Enzyme
вместе с любыми другими необходимыми зависимостями.
Если вы создали свое приложение с помощью create-react-app
, значит, Jest
уже установлен в ваше приложение и полностью готов к работе. Пропустите шаг ниже.
Для тех, кто создал свое приложение React без использования create-react-app
, установите вместе с Jest
следующие зависимости:
npm install --save-dev jest babel-jest babel-preset-env babel-preset-react react-test-renderer
Давайте установим Enzyme
вместе с необходимыми зависимостями:
npm install --save-dev enzyme enzyme-adapter-react-16 react-test-renderer
На этом все готово для установки, теперь давайте настроим Enzyme
для работы с Jest
.
В папке src
вашего проекта создайте файл с именем setupTests.js
. Вставьте внутрь следующий код:
Теперь ваше приложение должно быть настроено на использование Jest
и Enzyme
для модульного тестирования.
Проведение вашего первого теста
При использовании Jest
тестовые файлы указываются со следующим соглашением об именах: Filename.test.js
. По сути, это то же самое, что и исходное имя файла, но с добавлением .test.
посередине.
Примером может служить исходный тестовый файл, созданный с помощью create-react-app
. Вы обнаружите, что он называется App.test.js
. Это тестовый файл, специально созданный для проверки чего-либо внутри файла App.js
.
Чтобы запустить наши тесты, сделайте в своем терминале следующее:
npm run test
Через несколько секунд в вашем терминале должно появиться следующее:
Поздравляем, вы успешно выполнили свой первый тест!
Написание нашего первого теста
Итак, мы знаем, как запускать наши тесты, теперь приступим к их написанию. Сначала посмотрим на App.test.js
. На данный момент файл должен выглядеть так:
Это простой тест, написанный для проверки того, будет ли компонент <App />
отображаться без сбоев. Этот тест также проверит render
скорость компонента.
Теперь давайте посмотрим на App.js
, файл, который App.test.js
тестирует:
Это ваш типичный App.js
файл, созданный create-react-app
. А теперь избавимся от всего, кроме самого верхнего уровня <div>
. Ваш App.js
теперь должен выглядеть так:
Теперь давайте создадим <button>
, который переключает state
с именем buttonState
с начальным значением false
. При нажатии state
будет иметь значение true
и отобразить h1
с текстом "HELLO"
.
Теперь ваш браузер должен отображать созданный нами <button>
, а при нажатии - текстовое отображение "HELLO"
.
Визуально это может показаться не таким уж большим, но этого более чем достаточно, чтобы приступить к написанию нашего первого теста. Вы должны уметь разбирать компоненты и функции до мельчайших деталей и смотреть на них с разных точек зрения. Эти знания помогут вам написать отличные модульные тесты.
Итак, как мы можем это сломать? Давай подумаем.
- Пользователь должен видеть отрендеренный
<button>
. - При нажатии пользователь должен увидеть на экране
"HELLO"
. - Начальное состояние
buttonState
всегда должно бытьfalse
.
Этих трех вещей должно быть достаточно для начала. А теперь приступим к написанию тестов! Сначала давайте возьмем import
Enzyme shallow rendering
на верхнем уровне нашего тестового файла.
Shallow rendering
полезно ограничить себя тестированием компонента как модуля и убедиться, что ваши тесты не подтверждают косвенно поведение дочерних компонентов.
Теперь давайте напишем наш первый тест внутри App.test.js
.
Давайте разберем приведенный выше код.
Ваш App.test.js
теперь должен выглядеть так.
Давайте снова запустим наши тесты с npm run test
. Наш терминал должен отображать следующее:
Поздравляю! Вы написали свой первый тест, но как мы узнаем, что он на самом деле тестирует правильно и не дает ложных срабатываний. Легкий. В вашем App.js
комментарии строка, содержащая элемент кнопки.
Затем запустите npm run test
. Затем он должен дать вам неудачный тест.
Не делайте это обычной практикой для своих тестов.
Когда вы научитесь писать и запускать тесты, используйте snapshot testing
для проверки изменений в вашем пользовательском интерфейсе.
При работе над большими проектами количество тестов может увеличиваться, что немного затрудняет поиск конкретного теста в большом списке. Вот где describe
может пригодиться. describe
создает блок, который объединяет несколько связанных тестов в один «набор тестов». Это используется для очистки больших списков тестов, чтобы легко различать разные наборы тестов.
При использовании npm run test
ваш терминал должен выглядеть примерно так:
Видите, как аккуратно разделены мои тесты для моего <App />
компонента и моего <Link />
компонента? В этом сила функции describe
.
Заключение
Этого должно хватить для этого урока. Это почти не касается использования Jest
и Enzyme
, но этого должно быть достаточно, чтобы вы смогли написать свои собственные тесты. Теперь я хотел бы, чтобы вы закончили писать оставшиеся тесты, о которых мы думали ранее, с помощью руководств и документов Jest
и Enzyme
, а затем я хотел бы, чтобы вы бросили вызов самому себе, создав и протестировав свои собственные компоненты.
Остальные тесты:
- При нажатии пользователь должен увидеть на экране
"Hello"
. - Начальное состояние
buttonState
всегда должно бытьfalse
.
Надеюсь, вы кое-что узнали. До скорого.
Смотрите полное репо здесь: