Testkomponenter i React är en avgörande del av utvecklingsprocessen för att säkerställa tillförlitligheten och funktionen i din applikation. En kraftfull teknik i React -testning använderReageraI kombination med enzym. Som enzymleverantör är jag här för att vägleda dig genom processen att testa komponenter medReageramed enzym.
Förstå reaktion.cloneelement
Reageraär en inbyggd - i funktion i React som gör att du kan klona ett befintligt React -element och eventuellt skicka nya rekvisita till det. Detta kan vara extremt användbart när du vill ändra beteendet eller utseendet på en komponent under testning. Syntaxen avReageraär som följer:
React.cloneElement (element, [rekvisita], [... barn])
Här,elementär det element du vill klona,rekvisitaär ett valfritt objekt som innehåller de nya rekvisita du vill skicka till det klonade elementet ochbarnär de valfria nya barnen för det klonade elementet.


Ställa in testmiljön
Innan vi börjar testa medReageraMed hjälp av enzym måste vi ställa in en korrekt testmiljö. Se först till att du har reagerat och enzym installerat i ditt projekt. Du kan installera enzym och dess adapter för React med NPM eller garn:
NPM Installation-Save-dev-enzymenzym-adapter-reaktion-16
Konfigurera sedan enzym för att använda lämplig adapter i din testinställningsfil. För React 16 skulle det se ut så här:
importera enzym från 'enzym'; Importera adapter från 'enzym-adapter-reaktion-16'; Enzym.configure ({adapter: ny adapter ()});
Testningskomponenter med React.CloneElement och enzym
Låt oss anta att vi har en enkel React -komponent som heterKnappsom accepterar afunktionshindradstötta:
import react från'react '; const -knapp = ({inaktiverad, barn}) => {return (<knappaktiverad = {inaktiverad}> {barn} </knapp>); }; Exportera standardknapp;
Vi vill testa hurKnappkomponenten uppför sig närfunktionshindradprop ändras. Vi kan användaReageraI våra enzymtester för att uppnå detta.
import react från'react '; importera {grunt} från 'enzym'; importknapp från './Button'; beskriva ('knappkomponent', () => {it ('bör inaktiveras när funktionshindrade prop är sant', () => {const originalElement = <knapp> klicka på mig </knapp>; const clonElement = react.cloneElement (originalElement, {Disable: true}); const wrapper = schallow (kloning); förvänta sig (wrapper.find ('knapp'). prop ('inaktiverad')). TOBE (true); förvänta sig (wrapper.find ('knapp'). prop ('inaktiverad')). TOBE (falsk);
I ovanstående tester skapar vi först ett originalKnappelement. Då använder viReageraför att skapa ett nytt element med det önskadefunktionshindradstötta. Slutligen använder vi enzymgrundåterge för att göra det klonade elementet och kontrollera omfunktionshindradprop of the theknappElementet ställs in korrekt.
Avancerade testscenarier
I mer komplexa scenarier kanske du vill testa komponenter som har kapslade barn eller komponenter som förlitar sig på sammanhang. Låt oss överväga en komponent som heterFöräldrakomponentsom gör enBarnkomponentinuti det:
import react från'react '; importera barnkomponent från './childComponent'; const ParentComponent = () => {return (<Div> <ChildComponent /> </div>); }; Export standardföräldraskap;
Vi kan användaReageraatt skicka ytterligare rekvisita tillBarnkomponentunder testning.
import react från'react '; importera {grunt} från 'enzym'; Importera överordnade komponent från './ParentComponent'; importera barnkomponent från './childComponent'; beskriva ('förälderkomponent', () => {it ('bör överföra ytterligare rekvisita till childComponent', () => {const wrapper = grunow (<parentComponent />); const child = wrapper.find (childComponent); const clonedchild = react.cloneelement (child.get (0), {{testProp '};};}; grunt (klonadchild);
I det här exemplet gör vi först gruntFöräldrakomponentoch hittaBarnkomponentinuti den. Då använder viReageraatt klonaBarnkomponentoch skicka en ny rekvisita till det. Slutligen gör vi grunt de klonadeBarnkomponentoch kontrollera om den nya rekvisiten är korrekt inställd.
Använda react.cloneelement med sammanhang
React -sammanhang är ett sätt att dela data mellan komponenter utan att behöva skicka rekvisita manuellt genom alla nivåer i komponentträdet. Du kan också användaReageraFör att testa komponenter som förlitar sig på sammanhang.
Låt oss anta att vi har enContextProvideroch enContextconsumerkomponent:
import react, {createContext, usEcontext} från'react '; const myContext = createContext (); const contextProvider = ({barn}) => {const contextValue = {meddelande: 'hej från context'}; returnera (<myContext.provider värde = {contextValue}> {barn} </mycontext.provider>); }; const contextConsumer = () => {const {meddelande} = usEcontext (myContext); return <div> {meddelande} </div>; }; Exportera {ContextProvider, ContextConsumer};
Vi kan användaReageraför att testaContextconsumerkomponent isolerat genom att tillhandahålla ett håligt sammanhangsvärde.
import react från'react '; importera {grunt} från 'enzym'; import {contextProvider, contextConsumer} från './ContextComponents'; beskriva ('contextConsumer', () => {it ('bör visa rätt meddelande från context', () => {const mockContextValue = {meddelande: 'mock meddelande'}; const originalElement = <contextConsumer />; const clonEdelement = react.cloneelement (originalElement, {context: mockConTeLExEtValue) <KontextProvider> {ClonEdElement} </contextProvider>);
Slutsats
Testkomponenter medReageraAtt använda enzym är en kraftfull teknik som gör att du kan modifiera och testa beteendet hos React -komponenter i olika scenarier. Oavsett om du testar enkla komponenter eller komplexa som förlitar sig på sammanhang,ReageraKan hjälpa dig att skapa mer robusta och pålitliga tester.
Om du är intresserad av att förbättra dina React -testfunktioner kan du också vara intresserad av några av våra relaterade produkter. Kolla in vårNaturligt organiskt rödbetor,RosmarinoljaochParidis Rhizoma Extract Polypyllin.
Om du har några frågor eller är intresserad av att köpa våra enzymprodukter för dina testbehov, vänligen kontakta oss för en detaljerad diskussion. Vi är här för att ge dig de bästa lösningarna för dina React -testkrav.
Referenser
- Reagera officiell dokumentation
- Enzym officiell dokumentation