Att testa händelsehanterare i React-komponenter är en avgörande aspekt för att säkerställa tillförlitligheten och funktionaliteten hos dina applikationer. Enzyme, ett populärt testverktyg för React, tillhandahåller en kraftfull uppsättning verktyg för att förenkla denna process. Som enzymleverantör förstår vi utmaningarna som utvecklare står inför när det gäller att testa React-komponenter, särskilt händelsehanterare. I det här blogginlägget kommer vi att utforska hur man effektivt testar händelsehanterare i React-komponenter med hjälp av Enzyme.
Förstå händelsehanterare i React
Innan du börjar testa är det viktigt att förstå vilka händelsehanterare som finns i React. Händelsehanterare är funktioner som utlöses som svar på vissa händelser, såsom klick, knapptryckningar eller formulärinlämningar. I React definieras dessa hanterare vanligtvis som metoder inom en komponentklass eller som pilfunktioner i funktionella komponenter.
Här är ett enkelt exempel på en funktionell React-komponent med en händelsehanterare:
importera Reagera från'reagera'; const ButtonComponent = () => { const handleClick = () => { console.log('Knappen klickad!'); }; return ( <button onClick={handleClick}>Klicka på mig</button> ); }; export standard ButtonComponent;
I det här exemplet ärhandleClickfunktion är en händelsehanterare som anropas när knappen klickas.
Ställa in enzym för testning
För att börja testa händelsehanterare med Enzyme måste du ställa in din testmiljö. Se först till att du har Enzyme och dess adapter installerade i ditt projekt. Du kan installera dem med npm eller garn:
npm install --save-dev enzym enzyme-adapter-react-16
Konfigurera sedan Enzyme för att använda lämplig adapter i din testinstallationsfil. För React 16 kan du använda följande kod:
importera enzym från 'enzym'; importera Adapter från 'enzyme-adapter-react-16'; Enzyme.configure({ adapter: new Adapter() });
Testar händelsehanterare med enzym
Nu när din testmiljö är inställd, låt oss titta på hur man testar händelsehanterare med hjälp av Enzyme. Enzyme tillhandahåller flera metoder för att simulera händelser på React-komponenter, som t.exsimulera.
Simulera en klickhändelse
Låt oss testaButtonComponentvi definierade tidigare. Så här kan du simulera en klickhändelse och verifiera att händelsehanteraren anropas:
importera Reagera från'reagera'; importera { grunt } från 'enzym'; importera ButtonComponent från './ButtonComponent'; describe('ButtonComponent', () => { it('should call handleClick when button clicked', () => { const wrapper = shallow(<ButtonComponent />); const spy = jest.spyOn(wrapper.instance(), 'handleClick'); wrapper.instance().force'.silick();mulbuttonclick();mulbutton(').si(); förvänta(spion).toHaveBeenCalled( });
I det här testet skapar vi först en ytlig rendering avButtonComponentanvänder enzymergrundmetod. Sedan skapar vi en spion påhandleClickfunktion med hjälp av Jest'sspionmetod. Efter det tvingar vi en uppdatering av komponentinstansen för att säkerställa att spionen är korrekt kopplad. Slutligen simulerar vi en klickhändelse på knappen med hjälp avsimulerametod och verifiera att spionen har anropats.
Testa händelsehanterare med argument
Ibland kan händelsehanterare acceptera argument. Tänk till exempel på följande komponent:
importera Reagera från'reagera'; const InputComponent = () => { const handleChange = (händelse) => { console.log('Indatavärde ändrat:', event.target.value); }; return ( <input type="text" onChange={handleChange} /> ); }; export standard InputComponent;
För att testa den här komponenten måste vi skicka ett händelseobjekt tillsimulerametod. Så här kan du göra det:
importera Reagera från'reagera'; importera { grunt } från 'enzym'; importera InputComponent från './InputComponent'; describe('InputComponent', () => { it('ska anropa handleChange med korrekt värde när indata ändras', () => { const wrapper = grunt(<InputComponent />); const spy = jest.spyOn(wrapper.instance(), 'handleChange'); wrapper.instance().forceUpdate-målet {;} {const}-händelse {;} {; wrapper.find('input').simulate('change', event expect(spy).toHaveBeenCalledWith(event });
I det här testet skapar vi ett skenbart händelseobjekt med enmålegenskap som innehåller det nya inmatningsvärdet. Sedan skickar vi detta händelseobjekt som det andra argumentet tillsimulerametod. Slutligen verifierar vi atthandtag Ändrafunktion har anropats med rätt händelseobjekt.
Testa komplexa händelsehanterare
I vissa fall kan händelsehanterare ha komplex logik, som att göra API-anrop eller uppdatera komponentens tillstånd. För att testa dessa typer av händelsehanterare kan du behöva använda ytterligare testtekniker, som att håna externa beroenden.
Tänk till exempel på följande komponent som gör ett API-anrop när en knapp klickas:
importera Reagera från'reagera'; importera axios från 'axios'; const ApiComponent = () => { const handleClick = async () => { try { const response = await axios.get('https://api.example.com/data'); console.log('API-svar:', respons.data); } catch (error) { console.error('API-fel:', fel); } }; return ( <button onClick={handleClick}>Hämta data</button> ); }; export standard ApiComponent;
För att testa den här komponenten kan vi använda Jest'sis.mockfunktion för att hånaaxiosmodul. Så här kan du göra det:
importera Reagera från'reagera'; importera { grunt } från 'enzym'; importera ApiComponent från './ApiComponent'; importera axios från 'axios'; jest.mock('axios'); describe('ApiComponent', () => { it('ska anropa axios.get när man klickar på knappen', async () => { const wrapper = grunt(<ApiComponent />); const spy = jest.spyOn(wrapper.instance(), 'handleClick'); wrapper.instance constockReucSponse 'constockReucS data '{).forceUpdate:{100}{101} } ; axios.get.mockResolvedValue(mockResponse('button').simulate('click'); expect(axios.get).
I det här testet hånar vi förstaxiosmodul använderis.mock. Sedan skapar vi ett låtsassvarsobjekt och ställer in det som det lösta värdet föraxios.getmetod som användermockResolvedValue. Slutligen simulerar vi en klickhändelse på knappen och verifierar atthandleClickfunktion har anropats och detaxios.gethar anropats med rätt URL.
Slutsats
Att testa händelsehanterare i React-komponenter är en viktig del för att säkerställa kvaliteten och tillförlitligheten i dina applikationer. Enzyme tillhandahåller en kraftfull uppsättning verktyg för att förenkla denna process, så att du kan simulera händelser och verifiera att dina händelsehanterare fungerar som förväntat.


Som enzymleverantör erbjuder vi ett brett utbud av produkter och tjänster för att hjälpa dig med dina testbehov. Om du är intresserad av att köpa våra produkter eller diskutera dina testkrav är du välkommen att kontakta oss för en upphandlingsförhandling.
Vi erbjuder också en mängd olika örtextrakt som kan vara av intresse för dig. Kolla in vårYucca Rostrata/Yucca Schidigera extraktpulver,Söt mandelolja, ochNålsvampextrakt 97 % renhetssvampextrakt som används för att förnya huden.
Referenser
- React Documentation: https://reactjs.org/docs/handling-events.html
- Enzymdokumentation: https://enzymejs.github.io/enzyme/
- Jest-dokumentation: https://jestjs.io/docs/getting-started