JS: Dom Testing Library
Теория: События (User Events)
Ядро e2e-теста, это события, которые вызываются для последующей проверки работоспособности страницы. В простейших случаях для этого можно использовать стандартные события DOM, например клик по кнопке.
Как и в случае с поиском элементов, для событий в Testing Library сделана своя библиотека user-event. Связано это с тем, что действия выполняемые пользователям, в некоторых ситуациях, сложнее чем, просто вызов события на элементе.
Возьмем для примера набор текста в полях формы. Во время этого процесса вызывается множество событий разделенных во времени. В том числе потому, что человек, обычно, набирает текст постепенно. За это время вызывается череда событий, таких как keydown, keypress, input, keyup, причем для каждого символа индивидуально с определенной задержкой. Преимущества использования библиотеки:
- Сложные взаимодействия "упакованы" в простые методы
- Комплексные события гарантированно вызываются со всеми вложенными событиями в правильном порядке.
- В библиотеку встроена поддержка специальных клавиш и модификаторов для имитации сложных взаимодействий
Самостоятельно имитировать подобное поведение довольно сложно, поэтому проще использовать готовые решения и Testing Library их предоставляет.
Использование
Библиотека устроена таким образом, что она имитирует создание пользователя в виде объекта, от которого происходит вызов различных событий. Это довольно наглядно указывает на разницу между событиями самого DOM и пользовательскими событиями.
Testing Library рекомендует вызывать userEvent.setup() до рендеринга. В примере выше рендеринг происходит на вызове new TicTacToe(document.body). Даже если тестов будет несколько, совершенно нормально вызывать этот код в начале каждого теста.
Если тестов становится действительно много, то дублирования можно избежать написав setup() функцию таким образом:
Возможно у вас возник вопрос, а почему бы не сделать это один раз перед тестами, например в хуке beforeAll(). Проблема в том, что каждый тест меняет глобальное окружение document, поэтому устанавливать его нужно заново в каждом тесте. А использовать beforeEach() для сетапа не рекомендуется из-за сложностей при наличии вложенных тестов. Подробнее прочитать об этом можно в статье, в дополнительных материалах.
События
Все события асинхронны. Это значит что любой метод события в библиотеке user-event возвращает Promise. А значит в тестах будет активно использоваться async/await.
Ниже мы разберем несколько событий из этой библиотеки. Остальные события доступны в официальной документации.
type
Метод type() заполняет текстовое поле переданным значением полностью имитируя пользовательское поведение, которое включает в себя клик на поле для ввода. Поддерживает специальные клавиши, например
keyboard
Если вам нужно просто симулировать нажатия клавиш на клавиатуре, то тогда используется метод keybaord(). В этом случае реальный эффект от его использования будет зависеть от того, где сейчас находится фокус в документе.
clear
Метод clear() используется для очистки редактируемого элемента. Внутри он раскладывается на фокусировку, выделение и удаление контента через браузерное меню.
selectOptions
Метод selectOptions() позволяет выбрать одну или несколько опций из списка Select.
Рекомендуемые программы
Завершено
0 / 7

