Простые и полные утилиты тестирования перехватов React, которые поощряют хорошие практики тестирования.
Если вы используете текущую версию react-testing-library
, замените
import { renderHook } from '@testing-library/react-hooks'
с
import { renderHook } from '@testing-library/react'
После замены @testing-library/react-hooks
можно удалить.
В рамках изменений для React 18 было решено, что API renderHook
предоставляемый этой библиотекой, вместо этого будет включен в качестве официального дополнения как к react-testing-library
(PR), так и к react-native-testing-library
(PR) с намерение состоит в том, чтобы обеспечить более целостную и последовательную реализацию для наших пользователей.
Пожалуйста, проявите терпение, пока мы завершаем внесение этих изменений в соответствующие библиотеки тестирования. Тем временем вы можете установить @testing-library/react@^13.1
useCounter.js
useCounter.test.js
Вы пишете потрясающий собственный хук и хотите его протестировать, но как только вы его вызываете, вы видите следующую ошибку:
Нарушение инварианта: хуки можно вызывать только внутри тела функционального компонента.
На самом деле вы не хотите писать компонент исключительно для тестирования этого хука и должны решить, как вы собираетесь запускать все различные способы обновления хука, особенно с учетом сложности того, как вы все это подключили. .
react-hooks-testing-library
позволяет вам создать простую тестовую среду для хуков React, которая обрабатывает их запуск внутри тела функционального компонента, а также предоставляет различные полезные служебные функции для обновления входных данных и получения выходных данных вашего удивительного компонента. индивидуальный крючок. Цель этой библиотеки — предоставить опыт тестирования, максимально приближенный к использованию вашего хука в реальном компоненте.
Используя эту библиотеку, вам не нужно беспокоиться о том, как создавать, отображать или взаимодействовать с компонентом реагирования, чтобы протестировать свой хук. Вы можете просто использовать хук напрямую и подтвердить результаты.
useCounter.js
import { useState , useCallback } from 'react'
function useCounter ( ) {
const [ count , setCount ] = useState ( 0 )
const increment = useCallback ( ( ) => setCount ( ( x ) => x + 1 ) , [ ] )
return { count , increment }
}
export default useCounter
useCounter.test.js
import { renderHook , act } from '@testing-library/react-hooks'
import useCounter from './useCounter'
test ( 'should increment counter' , ( ) => {
const { result } = renderHook ( ( ) => useCounter ( ) )
act ( ( ) => {
result . current . increment ( )
} )
expect ( result . current . count ) . toBe ( 1 )
} )
Более продвинутое использование можно найти в документации.
npm install --save-dev @testing-library/react-hooks
react-hooks-testing-library
не поставляется в комплекте с версией react
, позволяющей вам установить конкретную версию, которую вы хотите протестировать. Он также не поставляется с конкретным средством рендеринга, в настоящее время мы поддерживаем react-test-renderer
и react-dom
. Вам нужно установить только один из них, однако, если у вас установлены оба, мы будем использовать react-test-renderer
по умолчанию. Дополнительную информацию см. в документации по установке. Как правило, установленные версии react
и выбранного средства рендеринга должны иметь совпадающие версии:
npm install react@^16.9.0
npm install --save-dev react-test-renderer@^16.9.0
ПРИМЕЧАНИЕ. Минимальная поддерживаемая версия
react
,react-test-renderer
иreact-dom
—^16.9.0
.
См. справочник по API.
Спасибо этим замечательным людям (ключ смайлика):
Майкл Пейпер ? ? ? | отофу-квадрат | Патрик П. Хенли ? ? | Матеус Маркес | Друв Патель ? ? | Натаниэль Такер ? ? | Сергей Грищенко ? |
Хосеп М Собрепере | Марсель Тиннер | Дэниел К. ? | Винс Мэлоун | Себастьян Вебер | Кристиан Гилл | JavaScript Джо ✅ |
Сара Даян ? | Роман Гусев | Адам Секель | Кейя Сасаки | Ху Чен | Джош ? ? | Нааман Хиршфельд |
Брейдон Холл | Джейкоб М.Г. Эванс | Тигр Аброди | Амр А. Мохаммед | Юхана Яухиайнен | Йенс Мейндертсма | Марко Моретти ? |
Мартин В. | Ерозак | Ник МакКарди ? | Арья | numb86 | Алекс Янг ? | Бен Ламберт |
Дэвид Чо-Лерат | Эван Хармон | Джейсон Браун | КахВи Тенг | Леонид Шагабутдинов | Леви Батчер | Микеле Сеттепани |
Сэм | Танай Пратап | Том Рис-Хердман | икбал125 | Клиффжаобупт ? | Джон Купс | Джонатан Пейпер ? |
Шон Бэйнс | Михаил Васин | Александр Грбич | Джонатан Холмс | Микаэль Де Бой ? | Антон Зиновьев ? | Марианна-экзелат ? |
Матан Боренкраут ? | Андируогер | Брайан Уэйн ? ? | Роберт Сноу | Крис Чен | Масиус | Лайшуксин |
Этот проект соответствует спецификации всех участников. Любой вклад приветствуется!
Хотите внести свой вклад? Найдите этикетку Good First Issue.
Пожалуйста, сообщите об ошибках, отсутствующей документации или неожиданном поведении.
См. ошибки
Пожалуйста, сообщите о проблеме, чтобы предложить новые функции. Проголосуйте за запросы функций, добавив знак ?. Это помогает сопровождающим расставить приоритеты, над чем работать.
См. запросы на добавление функций
По вопросам, связанным с использованием библиотеки, вы можете задать вопрос здесь или посетить сообщество поддержки:
Массачусетский технологический институт