Hé! Enzimszállítóként sok embert láttam, hogy karcolják a fejét, amikor a portálokat a React komponensekben enzimmel végzett tesztelésekor. A portálok egy nagyon hűvös tulajdonság a React -ben, amely lehetővé teszi, hogy gyermekeket olyan DOM csomópontba hozza, amely a szülői összetevő DOM hierarchiáján kívül létezik. De a tesztelésük kissé fájdalmat okozhat a tudatában. Ebben a blogbejegyzésben néhány tippet és trükköt fogok megosztani a portálok reakciós komponenseinek enzimmel történő tesztelésére.
Mik azok a portálok a reagálásban?
Mielőtt belemerülnénk a tesztelésbe, gyorsan menjünk át a portálok. A React-ben a portálok első osztályú utat biztosítanak arra, hogy gyermekeket olyan DOM csomópontba hozzanak, amely a szülői komponens DOM hierarchiáján kívül létezik. Íme egy egyszerű példa egy portál használatára a React -ben:
az import reagáljon a 'React' -ből; Import Reactdom a 'React-dom' -ból; const PortalExample = ({gyermekek}) => {return reactdom.createPortal (gyermekek, document.getElementById ('Portal-Root')); }; Exportálási alapértelmezett PortalExample;
Ebben a példában aPortálexmintaAz alkatrész néhány gyermeket vesz, és az azonosítóval hozza őket a DOM csomópontbaportál-gyökér, amely bárhol lehet a HTML dokumentumban, még a szülő összetevő DOM -fára is.
Miért bonyolult a portálok tesztelése?
A portálok tesztelése kihívást jelenthet, mivel az enzim alapértelmezés szerint csak kölcsönhatásba lép a React komponensfával, és nem közvetlenül kölcsönhatásba lép a tényleges DOM -tal, ahol a portál gyermekeit teszi. Ez azt jelenti, hogy ha megpróbál egy olyan összetevőt tesztelni, amely egy portált használ az enzim normál módszereivel, akkor előfordulhat, hogy nem tudja elérni a portál megjelenített tartalmát.
A tesztelési környezet beállítása
Először is be kell állítania a tesztelési környezetet. Győződjön meg arról, hogy enzimet és adapterét a React telepítéséhez a projektbe telepítve van -e. Ha a React 16 vagy újabbat használja, akkor szüksége lesz aenzim-adapter-react-16vagy egy későbbi verzió a React verziójától függően.
NPM Install-Save-DEV enzim enzim-adapter-React-16
Ezután a tesztbeállítási fájlban konfigurálja az enzimet az adapter használatához:
Enzim importálása az „enzimből”; importálási adapter az „enzim-adapter-react-16” -ból; Enzim.configure ({adapter: új adapter ()});
Portálok tesztelése enzimmel
Most lépjünk be a tényleges tesztelésbe. Van néhány különféle megközelítés, amelyet az enzimporons komponensekben történő portálok tesztelésére lehet megtenni.
1. A portál gúnyolása
A portált használó összetevő tesztelésének egyik módja a portál funkciójának gúnyolódása. Ahelyett, hogy a gyermekeket egy külön DOM csomópontba állítanák, a tesztelés során közvetlenül az alkatrész normál megjelenítési módszerében jelenítheti meg őket.


Íme egy példa arra, hogyan lehet ezt megtenni:
az import reagáljon a 'React' -ből; Import {Mount} az 'enzimből'; const PortalExample = ({gyermekek, UsEportal = true}) => {if (itePortal) {return reactdom.createPortal (childs.getElementById ('Portal-Root')); } return <div> {gyermekek} </div>; }; Írja le ('PortalExample', () => {it ('' gyermekeket kell hoznia, ha nem használja a portálot ', () => {const Wrapper = Mount (<portalExample usePortal = {false}> teszt tartalom </portalExample>); várható (wrapper.Text ()).
Ebben a példában afelhasználóportálistámasz aPortálexmintaösszetevő. Amikorfelhasználóportálisazhamis, az alkatrész a gyermekeket közvetlenül a<div>A portál helyett. Ilyen módon könnyen tesztelhetjük az összetevő funkcionalitását enzim normál módszereivel.
2. A portál DOM csomópontjának tesztelése
Egy másik megközelítés a tényleges DOM csomópont tesztelése, ahol a portál gyermekeit teszi. Ehhez hozzá kell férnie a DOM csomóponthoz, és ellenőriznie kell annak tartalmát.
az import reagáljon a 'React' -ből; Import {Mount} az 'enzimből'; const PortalExample = ({gyermekek}) => {return reactdom.createPortal (gyermekek, document.getElementById ('Portal-Root')); }; Írja le ('PortalExample', () => {it ('' A Portal Root-ban gyermekeket kell készítenie ', () => {const Portalroot = Document.CreateElement (' Div '); Portalroot.id =' Portal-Root '; Document.body.AppendChild (Portalroot); const Wrapper = Mount (<Portalexample> Teszt-tartalom </Portalexample>); várható (Portalroot.TextContent).
Ebben a példában új DOM csomópontot hozunk létre az azonosítóvalportál-gyökérA teszt során szerelje fel az összetevőt enzim segítségével, majd ellenőrizze a tartalmatportalrootcsomópont. A teszt elvégzése után eltávolítjuk aportalrootcsomópont a DOM -tól a takarításhoz.
Harmadik fél könyvtárak használata
Vannak olyan harmadik fél könyvtárak is, amelyek megkönnyíthetik a portálok enzimkel történő tesztelését. Például a@tesztelés-könyvtár/reagálásA könyvtár beépített támogatással rendelkezik a portálok tesztelésére. Az enzimmel kombinálva felhasználhatja a React komponensek hatékonyabb tesztelésére.
NPM telepítés-save-dev @tesztelési könyvtár/reagálás
Íme egy példa arra, hogyan lehet használni@tesztelés-könyvtár/reagálásegy portált használó összetevő tesztelése:
az import reagáljon a 'React' -ből; Import {Mount} az 'enzimből'; Import {render, képernyő} a '@tesztelési-könyvtár/react' -ből; const PortalExample = ({gyermekek}) => {return reactdom.createPortal (gyermekek, document.getElementById ('Portal-Root')); }; Írja le ('PortalExample', () => {it ('' A Portal Root-ban kell lennie gyermekeket a portál gyökérében ', () => {const Portalroot = Document.CreateElement (' Div '); Portalroot.id =' Portal-Root '; Document.body.appendChild (Portalroot); Revender (<PortalExample> Test Content <///Portalexample>); Tartalom ”).
Ebben a példában használjuk@tesztelés-könyvtár/reagálásSbeadfunkció az összetevő és a megjelenítéshez ésscreen.getByTextAnnak ellenőrzéséhez, hogy a tartalom megjelenik -e a portál gyökérében.
Következtetés
A portálok tesztelése a React komponensekben enzimmel trükkös lehet, de a megfelelő megközelítéssel határozottan megvalósítható. Akár úgy dönt, hogy gúnyolódik a portálon, teszteli a portál DOM csomópontját, vagy harmadik fél könyvtárakat használ, a legfontosabb az, hogy megtalálja a módját a portál által nyújtott tartalom elérésére és ellenőrzésére.
Ha érdekli az enzimtermékeink, vagy bármilyen kérdése van a React komponensek tesztelésével kapcsolatban, bátran forduljon a beszerzési vitáról. Azért vagyunk itt, hogy segítsünk abban, hogy a lehető legtöbbet hozza ki az enzimből a projektekben.
Mellesleg, ha a gyógynövénykivonatok is érdekelnek, nézd meg ezeket a linkeket:Fekete kínai farkas,CBD kávé, ésKiváló minőségű terpentin olaj/terpentin olajgyár ár/ásványi terpentin olaj-
Referenciák
- React hivatalos dokumentáció a portálokról: React Team.
- Enzim Hivatalos dokumentáció: Airbnb.
- @Tesztelési könyvtár/React Hivatalos dokumentáció: Könyvtári csapat tesztelése.