Hur testar man modaler i React-komponenter med Enzyme?

Jan 21, 2026

Lämna ett meddelande

Dr. Emily Carter
Dr. Emily Carter
Som chef för hälsokostforskning på ASCLEPIUS leder jag vårt team för att utveckla banbrytande växter. Med över ett decennium av erfarenhet av naturlig produktkemi brinner jag för att skapa innovativa lösningar som utnyttjar naturens kraft.

Hej där, andra React-utvecklare! Om du arbetar med React-komponenter och hanterar modaler, vet du hur knepigt det kan vara att testa dem ordentligt. Det är där Enzyme kommer till stor nytta. Och gissa vad? Jag är en enzymleverantör, så jag har några fantastiska insikter att dela med dig om hur man testar modaler i React-komponenter med hjälp av Enzyme.

Först och främst, låt oss snabbt förstå vad enzym är. Enzyme är ett JavaScript-testverktyg för React som gör det lättare att hävda, manipulera och gå igenom dina React-komponenters utdata. Det ger ett gäng användbara metoder för att testa React-komponenter på ett mer intuitivt sätt. När det kommer till modaler i React vill vi se till att de öppnas och stängs korrekt, att innehållet inuti visas som förväntat och att eventuella interaktioner med modalen fungerar som avsett.

Konfigurera ditt projekt

Innan vi börjar testa modaler måste du ha Enzyme inställt i ditt projekt. Om du inte redan har gjort det kan du installera det med npm eller garn. Kör bara följande kommando i din terminal:

npm install --save-dev enzym enzyme-adapter-react-16

Detta kommer att installera Enzyme och adaptern för React 16. Om du använder en annan version av React, se till att installera rätt adapter.

När du har installerat Enzyme måste du konfigurera det i din testinstallationsfil. Här är ett exempel på hur du kan göra det:

importera enzym från 'enzym'; importera Adapter från 'enzyme-adapter-react-16'; Enzyme.configure({ adapter: new Adapter() });

Testa modal synlighet

En av de första sakerna vi vill testa när det kommer till modaler är deras synlighet. En modal bör öppnas när en specifik åtgärd utlöses, som att klicka på en knapp. Låt oss säga att vi har en enkel React-komponent med en knapp som öppnar en modal:

importera React, { useState } från 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const openModal = () => { setIsModalOpen(true); }; return ( <div> <button onClick={openModal}>Öppen modal</button> {isModalOpen && <div className="modal">Detta är en modal</div>} </div> ); }; export standard ModalComponent;

För att testa om modalen öppnar när man klickar på knappen kan vi använda Enzymesgrundrenderingsmetod. Här är testkoden:

importera Reagera från 'reagera'; importera { grunt } från 'enzym'; importera ModalComponent från './ModalComponent'; describe('ModalComponent', () => { it('ska öppna modalen när du klickar på knappen', () => { const wrapper = grunt(<ModalComponent />); const button = wrapper.find('button'); button.simulate('click'); expect(wrapper.find('.modal'));}exist;

I det här testet återger vi först ytligtModalComponent. Sedan hittar vi knappen med hjälp avwrapper.find('button')och simulera en klickhändelse på den. Slutligen kontrollerar vi om det modala elementet med klassenkapitalfinns i komponentens utgång.

Testa modalt innehåll

När vi har testat modalens synlighet kanske vi också vill testa innehållet i modalen. Till exempel, om modalen visar några dynamiska data, vill vi se till att de renderas korrekt. Låt oss uppdatera vårModalComponentför att visa lite dynamisk data:

importera React, { useState } från 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [modalData, setModalData] = useState('Några initiala data'); const openModal = () => { setIsModalOpen(true); }; return ( <div> <button onClick={openModal}>Öppen modal</button> {isModalOpen && <div className="modal">{modalData}</div>} </div> ); }; export standard ModalComponent;

Låt oss nu skriva ett test för att kontrollera om det modala innehållet är korrekt:

Squalene Oil/ Squalene 1000mg Soft CapsulesCherry Juice Powder,cherry Extract Powder Supplier Wholesale

importera Reagera från 'reagera'; importera { grunt } från 'enzym'; importera ModalComponent från './ModalComponent'; describe('ModalComponent', () => { it('ska visa det korrekta modala innehållet', () => { const wrapper = grunt(<ModalComponent />); const button = wrapper.find('button'); button.simulate('klick'); expect(wrapper.find('.modal').text(S) initial data);'

I detta test följer vi en liknande process som tidigare. Vi renderar komponenten ytligt, klickar på knappen för att öppna modalen och kontrollerar sedan om texten i modalen är lika med förväntad data.

Testar modal stängning

Precis som att testa öppningen av modalen måste vi också testa dess stängningsfunktionalitet. Låt oss lägga till en stängningsknapp till vårModalComponent:

importera React, { useState } från 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [modalData, setModalData] = useState('Några initiala data'); const openModal = () => { setIsModalOpen(true); }; const closeModal = () => { setIsModalOpen(false); }; return ( <div> <button onClick={openModal}>Öppen modal</button> {isModalOpen && ( <div className="modal"> {modalData} <button onClick={closeModal}>Stäng modal</button> </div> )} </div> ); }; export standard ModalComponent;

Låt oss nu skriva ett test för att kontrollera om modalen stänger när stängningsknappen klickas:

importera Reagera från 'reagera'; importera { grunt } från 'enzym'; importera ModalComponent från './ModalComponent'; describe('ModalComponent', () => { it('ska stänga modalen när du klickar på stängningsknappen', () => { const wrapper = shallow(<ModalComponent />); const openButton = wrapper.find('button').first(); openButton.simulate('click' =' wrapp.moderButton button); const. closeButton. closeButton.simulate('click'); expect(wrapper.find('.modal').exists()).toBe(false });

I det här testet öppnar vi först modalen genom att klicka på öppna-knappen. Sedan hittar vi stängningsknappen inuti modalen och simulerar en klickhändelse på den. Slutligen kontrollerar vi om det modala elementet inte längre finns i komponentens utgång.

Mer komplexa modala tester

Ibland kan modaler vara mer komplexa, med flera tillstånd och interaktioner. Till exempel kan en modal ha ett formulär i sig, och vi måste testa om formulärinlämningen fungerar korrekt. Låt oss lägga till ett enkelt formulär till vårModalComponent:

importera React, { useState } från 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [modalData, setModalData] = useState('Några initiala data'); const [formData, setFormData] = useState(''); const openModal = () => { setIsModalOpen(true); }; const closeModal = () => { setIsModalOpen(false); }; const handleSubmit = (e) => { e.preventDefault(); setModalData(formData); closeModal(); }; return ( <div> <button onClick={openModal}>Öppna modal</button> {isModalOpen && ( <div className="modal"> <form onSubmit={handleSubmit}> <input type="text" value={formData} onChange={(e) => setFormData(e.target.value) typ</button">form</submit.button)} <button onClick={closeModal}>Stäng modal</button> </div> )} </div> ); }; export standard ModalComponent;

Låt oss nu skriva ett test för att kontrollera om formulärinlämningen uppdaterar modaldata och stänger modal:

importera Reagera från 'reagera'; importera { grunt } från 'enzym'; importera ModalComponent från './ModalComponent'; describe('ModalComponent', () => { it('ska uppdatera modal data och stänga modal vid inlämning av formulär', () => { const wrapper = grunt(<ModalComponent />); const openButton = wrapper.find('button').first(); openButton.simulate('click'); const input ='click'); const; input.simulate('change', { target: 'New data' }); const form = wrapper.find('form');{ preventDefault: () => {} }); }); });

I det här testet öppnar vi först modalen och simulerar sedan en förändringshändelse i inmatningsfältet för att uppdatera formulärdata. Därefter simulerar vi en formulärinlämningshändelse och kontrollerar om modalen är stängd och modaldata uppdateras korrekt.

Slutsats

Att testa modaler i React-komponenter med Enzyme kan verka lite skrämmande till en början, men när du väl får kläm på det blir det en bris. Genom att följa stegen och exemplen jag har delat här, bör du kunna testa dina modaler effektivt och säkerställa att de fungerar som förväntat.

Om du letar efter högkvalitativa enzymprodukter för dina testbehov, tveka inte att göra detkontakta ossför mer information. Vi är här för att hjälpa dig att göra din testprocess så smidig som möjligt.

Och om du är intresserad av andra produkter, kolla in dessa länkar:

Referenser

  • Enzymdokumentation
  • Dokumentation för React Testing Library
  • Reagera officiell dokumentation
Skicka förfrågan