Тестирование компонентов в React является важной частью процесса разработки для обеспечения надежности и функциональности вашего приложения. Один мощный метод в реагировании используетсяReact.CloneElementв сочетании с ферментом. Как поставщик ферментов, я здесь, чтобы провести вас через процесс тестирования компонентов сReact.CloneElementиспользуя фермент.
Понимание React.cloneelement
React.CloneElementэто встроенный - функция в React, которая позволяет вам клонировать существующий элемент React и необязательно передать ему новые реквизиты. Это может быть чрезвычайно полезно, если вы хотите изменить поведение или внешний вид компонента во время тестирования. СинтаксисReact.CloneElementЭто следующее:
React.CloneElement (элемент, [реквизит], [... дети])
Здесь,элементэто элемент, который вы хотите клонировать,реквизитДополнительный объект, содержащий новый реквизит, который вы хотите передать к клонированному элементу, идетиявляются дополнительными новыми детьми для клонированного элемента.


Настройка среды тестирования
Прежде чем мы начнем тестировать сReact.CloneElementИспользуя фермент, нам нужно настроить правильную среду тестирования. Во -первых, убедитесь, что в вашем проекте установлены React и фермент. Вы можете установить фермент и его адаптер для реагирования с помощью NPM или пряжи:
Установка NPM-фермент-энзийный фермент-диван
Затем настройте фермент для использования соответствующего адаптера в файле настройки теста. Для React 16 это будет выглядеть так:
импортный фермент из «фермента»; Импорт адаптер из «Фермент-адаптер -реакция-16»; Enzyme.configure ({adapter: new adapter ()});
Компоненты тестирования с React.CloneElement и ферментом
Давайте предположим, что у нас есть простой компонент ReactКнопкаэто принимаетнеполноценныйProp:
Импорт реагирует от'react '; const button = ({отключен, дети}) => {return (<button Disabled = {отключить}> {дети} </button>); }; Экспорт кнопки по умолчанию;
Мы хотим проверить, какКнопкакомпонент ведет себя, когданеполноценныйопора изменяется. Мы можем использоватьReact.CloneElementВ наших ферментативных тестах для достижения этого.
Импорт реагирует от'react '; Импорт {неглубокий} из 'фермента'; Кнопка импорта из './button'; Опишите ('Component', () => {it ('должен быть отключен, когда отключенная пропь верно', () => {const riginalelement = <wutton> Нажмите Me </button>; const clonelement = React.CloneElement (OriginalElement, {Disabled: true}); const rupper = неглубокий (cloneLement); Ожидайте (warper.find ('button'). prop ('disabled')). tobe (true); weard (warper.find ('button'). prop ('Отключен')). Tobe (false);
В приведенных выше тестах мы сначала создаем оригиналКнопкаэлемент. Тогда мы используемReact.CloneElementЧтобы создать новый элемент с желаемымнеполноценныйпроп. Наконец, мы используем ферментмелкийрендеринг для визуализации клонированного элемента и проверить, еслинеполноценныйопоракнопкаэлемент установлен правильно.
Расширенные сценарии тестирования
В более сложных сценариях вы можете протестировать компоненты, в которых вложены детей или компоненты, которые зависят от контекста. Давайте рассмотрим компонент под названиемParentComponentэто делает аChildComponentвнутри:
Импорт реагирует от'react '; импортировать ChildComponent из './childComponent'; const parentcomponent = () => {return (<div> <childComponent /> < /div>); }; экспорт по умолчанию ParentComponent;
Мы можем использоватьReact.CloneElementпередать дополнительные реквизитыChildComponentво время тестирования.
Импорт реагирует от'react '; Импорт {неглубокий} из 'фермента'; импортировать ParentComponent из './parentcomponent'; импортировать ChildComponent из './childComponent'; Описать ('ParentComponent', () => {it ('должен передать дополнительные реквизиты ChildComponent', () => {const warper = неглубокий (<parentcomponent />); const chiled = warper.find (childComponent); const clonischild = React.cloneelement (child.get (0), {testprop: 'testvalue'}; мелкий (клонировал);
В этом примере мы сначала неглубоваParentComponentи найтиChildComponentвнутри. Тогда мы используемReact.CloneElementклонироватьChildComponentи передать ему новую опору. Наконец, мы неглубовались клонированнымиChildComponentи проверьте, правильно ли установлена новая опора.
Использование React.CloneElement с контекстом
Контекст React - это способ обмена данными между компонентами без необходимости передавать реквизиты вручную по каждому уровню компонентного дерева. Вы также можете использоватьReact.CloneElementпроверить компоненты, которые полагаются на контекст.
Давайте предположимКонтекст -провалениКонтекст -образныйкомпонент:
Импорт React, {createContext, USECONTEXT} от'React '; const myContext = createContext (); const contextprovider = ({kids}) => {const contextValue = {message: 'Привет из контекста'}; return (<myContext.provider value = {contextValue}> {дети} </mycontext.provider>); }; const contextconsumer = () => {const {message} = useContext (myContext); return <viv> {сообщение} </div>; }; Export {ContextProvider, ContextConsumer};
Мы можем использоватьReact.CloneElementЧтобы проверитьКонтекст -образныйкомпонент в изоляции путем предоставления значения контекста.
Импорт реагирует от'react '; Импорт {неглубокий} из 'фермента'; Import {ContextProvider, ContextConsumer} от './contextComponents'; Описать ('ContextConsumer', () => {it ('должен отображать правильное сообщение из контекста', () => {const mockContextValue = {Сообщение: 'Mock Message'}; const riginalElement = <contextConsumer />; const cloneedelement = reAct.cloneelement (OriginalElement, {Context: MockContextVelem {CloneDelement} </contextProvider>);
Заключение
Тестирование компонентов сReact.CloneElementИспользование фермента - это мощный метод, который позволяет вам модифицировать и проверять поведение компонентов React в различных сценариях. Чувствуете ли вы простые компоненты или сложные, которые полагаются на контекст,React.CloneElementможет помочь вам создать более надежные и надежные тесты.
Если вы заинтересованы в расширении возможностей реагирования, вы также можете заинтересоваться в некоторых из наших связанных продуктов. Проверьте нашНатуральная органическая свековая порошкаВМасло розмари, иЭкстракт ризомы Paridis polyphyllinПолем
Если у вас есть какие -либо вопросы или вы заинтересованы в покупке наших ферментных продуктов для ваших потребностей в тестировании, пожалуйста, свяжитесь с нами для подробного обсуждения. Мы здесь, чтобы предоставить вам лучшие решения для ваших требований к тестированию реагирования.
Ссылки
- Реагировать официальную документацию
- Официальная документация фермента