React Testing Library. Кастомный рендер
Мы можем настроить функцию
#тестирование #testinglibrary #документация #примерыкода
Мы можем настроить функцию
render
, передав вторым аргументом объект конфигурации. Например, можно добавить какую-то общую обертку с провайдерми для наших рендеров - параметр wrapper
.#тестирование #testinglibrary #документация #примерыкода
👍2
Render Hook
Помимо
Метод принимает два аргумента:
- рендер-функцию, которая должна вызвать хук и вернуть результат его работы
- объект конфигурации (опционально)
Результат работы хукуа будет доступен в поле
#тестирование #testinglibrary #документация #примерыкода
Помимо
render
у нас есть еще один метод - renderHook
. Как можно догадаться, он предназначен для работы с хуками.
import {renderHook} from '@testing-library/react'
test('returns logged in user', () => {
const {result, rerender} = renderHook((props = {}) => props, {
initialProps: {name: 'Alice'},
})
expect(result.current).toEqual({name: 'Alice'})
rerender()
expect(result.current).toEqual({name: undefined})
})
Метод принимает два аргумента:
- рендер-функцию, которая должна вызвать хук и вернуть результат его работы
- объект конфигурации (опционально)
Результат работы хукуа будет доступен в поле
result.current
.#тестирование #testinglibrary #документация #примерыкода
👍2
Руководство по React Testing Library
Статья (англ.): https://www.robinwieruch.de/react-testing-library/
Robin Wieruch по полочкам разложил, что такое RTL и как ей пользоваться.
1. RTL сама по себе не предназначена для организации тестов, поэтому нам в любом случае понадобится один тест-раннеров - Jest или Vitest. С их помощью напишем обертки тестов, а для конкретных действий уже будем использовать RTL.
2. В начале теста рендерим необходимые React-компоненты и сразу же перестаем о них думать как о React-компонентах. Мы должны тестировать обычный DOM, который видит пользователь.
3. RTL предоставляет огромное количество методов для поиска нужных элементов в отрендеренном фрагменте. Все они довольно подробно разобраны, кроме того, описано, когда и что предпочтительно использовать.
Запросы в testing-library
4. Пакет @testing-library/jest-dom добавляет множество удобных утверждений, вроде toBeInTheDocument.
5. Пользовательские события можно эмулировать с помощью fireEvent и user-event.
fireEvent
user-event
6. Разбираемся, как тестировать обработчики событий с помощью мокнутых функций.
7. И наконец учимся работать с асинхронными изменениями, например, сетевыми запросами, с помощью find-методов и waitFor. Не забываем мокать собственно методы, отправляющие запрос (axios/fetch/etc)
waitFor
пример тестирования компонента, выполняющего сетевой запрос
#ссылки #тестирование #testinglibrary
Статья (англ.): https://www.robinwieruch.de/react-testing-library/
Robin Wieruch по полочкам разложил, что такое RTL и как ей пользоваться.
1. RTL сама по себе не предназначена для организации тестов, поэтому нам в любом случае понадобится один тест-раннеров - Jest или Vitest. С их помощью напишем обертки тестов, а для конкретных действий уже будем использовать RTL.
2. В начале теста рендерим необходимые React-компоненты и сразу же перестаем о них думать как о React-компонентах. Мы должны тестировать обычный DOM, который видит пользователь.
3. RTL предоставляет огромное количество методов для поиска нужных элементов в отрендеренном фрагменте. Все они довольно подробно разобраны, кроме того, описано, когда и что предпочтительно использовать.
Запросы в testing-library
4. Пакет @testing-library/jest-dom добавляет множество удобных утверждений, вроде toBeInTheDocument.
5. Пользовательские события можно эмулировать с помощью fireEvent и user-event.
fireEvent
user-event
6. Разбираемся, как тестировать обработчики событий с помощью мокнутых функций.
7. И наконец учимся работать с асинхронными изменениями, например, сетевыми запросами, с помощью find-методов и waitFor. Не забываем мокать собственно методы, отправляющие запрос (axios/fetch/etc)
waitFor
пример тестирования компонента, выполняющего сетевой запрос
#ссылки #тестирование #testinglibrary
www.robinwieruch.de
React Testing Library Tutorial
Learn how to use React Testing Library in this tutorial. You will learn how to test your React components step by step with unit and integration tests ...
👍2
Testing Library. Полезные ресурсы
- документация Testing Library
- все существующие ARIA-роли для метода getByRole
- список утверждений, которые добавляются библиотекой @testing-library/jest-dom
#ссылки #тестирование #testinglibrary
- документация Testing Library
- все существующие ARIA-роли для метода getByRole
- список утверждений, которые добавляются библиотекой @testing-library/jest-dom
#ссылки #тестирование #testinglibrary
Testing-Library
Testing Library | Testing Library
Simple and complete testing utilities that encourage good testing practices
👍2
Простое руководство по тестированию взаимодействия с пользователем с помощью библиотеки тестирования React
Статья (рус.): https://reddeveloper.ru/blog/363/prostoye-rukovodstvo-po-testirovaniyu-vzaimodeistviya-s-pol-zovatelem-s-pomoshch-yu-biblioteki-testirovaniya-react
Из этой статьи мы возьмем несколько примеров того, что в принципе можно тестировать, так как у меня по-прежнему есть сомнения и вопросы в этой области.
1. Поле ввода работают правильно
Имеем селект. Тестируем, что он работает правильно и выбранное пользователем значение действительно выбирается.
Полезные методы:
- getByRole('combobox')
- userEvent.selectOptiions
- expect(select).toHaveValue
2. При вводе/выборе значения оно корректно отображается в интерфейсе
Имеем селект города. Выводим выбранный город где-то в интерфейсе Тестируем, что при выборе города в селекте он изменяется и в интерфейсе.
Полезные методы:
- поиск элемента по тексту getByText
- поиск элемента другими методами, но с уточнением его текста (в настройках метода), например,
3. При ховере появляется элемент
Имеем тултип, который должен появляться при наведении на элемент. Тестируем, что он появляется.
Полезные методы:
- userEvent.hover
- expect(tooltip).toBeInTheDocument
4. Загрузка файлов
Проверяем, что загрузчик файлов видит загруженные файлы.
Полезные методы:
- new File(['hello'], 'hello.png', {type: 'image/png'})
- userEvent.upload(filePicker, file)
- expect(filePicker.files[0]).toEqual(file)
5. Отправка формы
Имеем форму. Тестируем, что при правильном заполнении полей форма успешно отправляется.
Также тестируем все варианты валидации:
- пустые поля
- некорректно заполненные поля
Полезные методы:
- userEvent.type(field, text)
- userEvent.selectOptions(select, option)
- userEvent.click(element)
- getByPlaceholderText(text)
- getByLabelText(text)
#ссылки #тестирование #testinglibrary
Статья (рус.): https://reddeveloper.ru/blog/363/prostoye-rukovodstvo-po-testirovaniyu-vzaimodeistviya-s-pol-zovatelem-s-pomoshch-yu-biblioteki-testirovaniya-react
Из этой статьи мы возьмем несколько примеров того, что в принципе можно тестировать, так как у меня по-прежнему есть сомнения и вопросы в этой области.
1. Поле ввода работают правильно
Имеем селект. Тестируем, что он работает правильно и выбранное пользователем значение действительно выбирается.
Полезные методы:
- getByRole('combobox')
- userEvent.selectOptiions
- expect(select).toHaveValue
2. При вводе/выборе значения оно корректно отображается в интерфейсе
Имеем селект города. Выводим выбранный город где-то в интерфейсе Тестируем, что при выборе города в селекте он изменяется и в интерфейсе.
Полезные методы:
- поиск элемента по тексту getByText
- поиск элемента другими методами, но с уточнением его текста (в настройках метода), например,
getByRole('heading', { name: /moscow/i })
3. При ховере появляется элемент
Имеем тултип, который должен появляться при наведении на элемент. Тестируем, что он появляется.
Полезные методы:
- userEvent.hover
- expect(tooltip).toBeInTheDocument
4. Загрузка файлов
Проверяем, что загрузчик файлов видит загруженные файлы.
Полезные методы:
- new File(['hello'], 'hello.png', {type: 'image/png'})
- userEvent.upload(filePicker, file)
- expect(filePicker.files[0]).toEqual(file)
5. Отправка формы
Имеем форму. Тестируем, что при правильном заполнении полей форма успешно отправляется.
Также тестируем все варианты валидации:
- пустые поля
- некорректно заполненные поля
Полезные методы:
- userEvent.type(field, text)
- userEvent.selectOptions(select, option)
- userEvent.click(element)
- getByPlaceholderText(text)
- getByLabelText(text)
#ссылки #тестирование #testinglibrary
reddeveloper.ru
Простое руководство по тестированию взаимодействия с пользователем с помощью библиотеки тестирования React - RedDeveloper
В предыдущем посте я показал вам на примерах, как писать базовые тесты в React. Важнейшей частью пользовательского интерфейса приложений является взаимодействие с пользователем. При тестировании различных компонентов в React вам нужно будет имитировать взаимодействие…
👍2