Тестването на компоненти в React е решаваща част от процеса на разработка, за да се гарантира надеждността и функционалността на вашето приложение. Една мощна техника при тестване на React се използваReact.CloneElementВ комбинация с ензим. Като доставчик на ензими, аз съм тук, за да ви преведа през процеса на тестване на компоненти сReact.CloneElementИзползване на ензим.
Разбиране на React.CloneElement
React.CloneElementе вградена - във функция в React, която ви позволява да клонирате съществуващ React елемент и по желание да предавате нови реквизити към него. Това може да бъде изключително полезно, когато искате да промените поведението или появата на компонент по време на тестване. Синтаксисът наReact.CloneElementе както следва:
React.CloneElement (елемент, [реквизит], [... деца])
Тук,Елементе елементът, който искате да клонирате,реквизите незадължителен обект, съдържащ новите реквизити, които искате да преминете към клонирания елемент, идецаса незадължителните нови деца за клонирания елемент.


Настройване на тестовата среда
Преди да започнем да тестваме сReact.CloneElementИзползвайки ензим, трябва да създадем подходяща среда за тестване. Първо, уверете се, че сте инсталирани реагиращи и ензими във вашия проект. Можете да инсталирате ензим и неговия адаптер за реагиране, като използвате NPM или прежда:
Инсталиране на NPM-ензим-адап-адап-SAVE-DEV-REACT-16
След това, конфигурирайте ензима да използва подходящия адаптер във вашия тестов файл за настройка. За React 16 ще изглежда така:
внос ензим от „ензим“; Импортирайте адаптер от „Ензим-адаптер-React-16 '; Enzyme.configure ({адаптер: нов адаптер ()});
Тестване на компоненти с React.CloneElement и ензим
Да предположим, че имаме прост компонент за реакция, нареченБутонТова приема aдеактивиранprop:
импортиране реагира от'React '; const button = ({disabled, деца}) => {return (<button disabled = {disabled}> {childber} </button>); }; Бутон по подразбиране на експортиране;
Искаме да проверим какБутонКомпонентът се държи, когатодеактивиранProp се променя. Можем да използвамеReact.CloneElementВ нашите ензимни тестове за постигане на това.
импортиране реагира от'React '; импортиране {плитко} от 'ензим'; бутон за импортиране от './button'; descripte ('компонент на бутона', () => {it ('трябва да бъде деактивиран, когато опората за деактивиране е вярна', () => {const originalelement = <button> щракнете върху мен </tound>; const clonedElement = React.CloneElement (originalelement, {disabled: true}); const wrapper = плитка (clonedelement); Очаквайте (Wrapper.find ('бутон'). Prop ('Disabled')). ToBe (True); очаквайте (wrapper.find ('бутон'). prop ('disabled')). Tobe (false);
В горните тестове първо създаваме оригиналБутонЕлемент. След това използвамеReact.CloneElementЗа да създадете нов елемент с желанитедеактивиранопора. Накрая използваме ензимнитеплиткаизобразяване за изобразяване на клонирания елемент и проверете далидеактивиранопора набутонЕлементът е зададен правилно.
Разширени сценарии за тестване
В по -сложни сценарии може да искате да тествате компоненти, които имат вложени деца или компоненти, които разчитат на контекст. Нека разгледаме компонент, нареченParentComponentкоето прави aДетски съставенвътре в него:
импортиране реагира от'React '; внос на деца от './ChildComponent'; const parentComponent = () => {return (<div> <childComponent /> </div>); }; Експортиране по подразбиране ParentComponent;
Можем да използвамеReact.CloneElementЗа да предадете допълнителни реквизити наДетски съставенпо време на тестване.
импортиране реагира от'React '; импортиране {плитко} от 'ензим'; импортиране на родител от './ParentComponent'; внос на деца от './ChildComponent'; Опишете ('ParentComponent', () => {it ('трябва да предаде допълнителни реквизити на деца', () => {const wrapper = плитка (<parentComponent />); const child = wrapper.find (childComponent); const clonedchild = react.cloneelement (child.get (0), {testprop: 'testvalue'}); плитки (clonedchild);
В този пример първо плитки правимParentComponentи намеретеДетски съставенвътре в него. След това използвамеReact.CloneElementда клонираДетски съставени предайте нова опора към него. Накрая ние плитко правим клониранитеДетски съставени проверете дали новата опора е зададена правилно.
Използване на React.CloneElement с контекст
Контекстът на React е начин за споделяне на данни между компонентите, без да се налага да прехвърляте реквизит ръчно през всяко ниво на дървото на компонентите. Можете също да използватеReact.CloneElementда тества компоненти, които разчитат на контекст.
Да предположим, че имамеContextProviderи aContextConsumerКомпонент:
import React, {CreateContext, useContext} от'React '; const myContext = createContext (); const contextProvider = ({children}) => {const contextValue = {message: 'здравей от контекст'}; return (<mycontext.provider value = {contextValue}> {kidswors} </mycontext.provider>); }; const contextConsumer = () => {const {message} = useContext (myContext); return <div> {съобщение} </div>; }; Експорт {contextProvider, contextConsumer};
Можем да използвамеReact.CloneElementЗа да тестватеContextConsumerКомпонент в изолация чрез осигуряване на макетна контекстна стойност.
импортиране реагира от'React '; импортиране {плитко} от 'ензим'; import {contextProvider, contextConsumer} от './contextcomponents'; descripte ('contextConsumer', () => {it ('трябва да покаже правилното съобщение от контекст', () => {const mockContextValue = {съобщение: 'макетно съобщение'}; const originalement = <contextConsumer />; const clonedElement = react.cloneelement (originalelement, {contegly: mockcontextValue}); ;
Заключение
Тестване на компоненти сReact.CloneElementИзползването на ензим е мощна техника, която ви позволява да променяте и тествате поведението на компонентите на React в различни сценарии. Независимо дали тествате прости компоненти или сложни, които разчитат на контекст,React.CloneElementМоже да ви помогне да създадете по -здрави и надеждни тестове.
Ако се интересувате от подобряване на вашите възможности за тестване на реагиране, може да се интересувате и от някои от нашите свързани продукти. Вижте нашитеЕстествен органичен цветен прах,Розмаринско маслоиParidis rhizoma екстракт полифилин.
Ако имате някакви въпроси или се интересувате от закупуване на нашите ензимни продукти за вашите нужди за тестване, не се колебайте да се свържете с нас за подробна дискусия. Ние сме тук, за да ви предоставим най -добрите решения за вашите изисквания за тестване на реагиране.
ЛИТЕРАТУРА
- Реагирайте официалната документация
- Ензимна официална документация