Hej, kolege React programeri! Danas ću pričati o tome kako da testiram padajuće menije u komponentama React-a sa Enzimom. Kao dobavljač enzima, iz prve ruke uverio sam se u važnost pravilnog testiranja u React projektima, posebno kada je reč o tim dosadnim padajućim menijima.
Zašto je testiranje padajućih menija važno
Padajući meni su uobičajena UI komponenta u React aplikacijama. Koriste se za stvari poput odabira opcija, filtriranja podataka i navigacije po menijima. Ali oni takođe mogu biti teški da se isprave. Mala greška u padajućem izborniku može dovesti do lošeg korisničkog iskustva, kao što su opcije koje se ne prikazuju ispravno ili se padajući izbornik ne zatvara kada bi trebao.
Tu dolazi testiranje. Pisanjem testova za svoje padajuće liste, možete uhvatiti ove greške rano u procesu razvoja, prije nego što dođu u proizvodnju. A Enzim je odličan alat za to.
Početak rada sa Enzimom
Prije nego što zaronimo u padajuće menije za testiranje, hajde da brzo prođemo kroz kako postaviti Enzyme u vašem React projektu. Ako već niste, morat ćete instalirati Enzyme i njegov adapter za React. To možete učiniti koristeći npm ili pređu:
npm install --save-dev enzyme enzyme-adapter-react-16
Nakon što instalirate Enzyme, morat ćete ga konfigurirati da radi s vašom React verzijom. U vašoj datoteci za postavljanje testa (običnosrc/setupTests.js), dodajte sljedeći kod:
import Enzyme from 'enzyme'; import Adapter iz 'enzyme-adapter-react-16'; Enzyme.configure({ adapter: novi adapter() });
Sada ste spremni za početak testiranja!
Testiranje jednostavnog padajućeg menija
Počnimo testiranjem jednostavne padajuće komponente. Evo primjera osnovnog padajućeg menija u Reactu:
import React, { useState } iz 'react'; const Dropdown = () => { const [isOpen, setIsOpen] = useState(false); const options = ['Opcija 1', 'Opcija 2', 'Opcija 3']; const toggleDropdown = () => { setIsOpen(!isOpen); }; return ( <div> <button onClick={toggleDropdown}>Prebaci padajući meni</button> {isOpen && ( <ul> {options.map((option, index) => ( <li key={index}>{option}</li> ))} </ul> )} </div> ); }; izvoz podrazumevani padajući meni;
Da bismo testirali ovaj padajući meni, želimo da se uverimo da klikom na dugme prebacujete vidljivost liste opcija. Evo kako to možemo učiniti koristeći Enzim:
import React from 'react'; import { plitko } iz 'enzima'; uvoz padajućeg menija iz './Dropdown'; describe('Dropdown', () => { it('treba prebaciti padajući meni kada se klikne na dugme', () => { const wrapper = plitko(<Dropdown />); const button = wrapper.find('button'); // U početku, padajući meni bi trebao biti zatvoren expect(wrapper.find('ul'); // Biti otvoren padajući gumb ('ul'); button.simulate('click').expert()).toBe(true);
U ovom testu prvo koristimoplitkoda render thePadajući menikomponenta. Zatim nalazimo dugme koristećinaćii simulirati događaj klika koristećisimulirati. Konačno, koristimopostojida provjerite da li je lista opcija vidljiva ili ne.
Testiranje padajućeg odabira
Sada idemo korak dalje i testiramo odabir opcije u padajućem izborniku. Mi ćemo modifikovati našePadajući menikomponenta za upravljanje odabirom opcija:
import React, { useState } iz 'react'; const Dropdown = () => { const [isOpen, setIsOpen] = useState(false); const [selectedOption, setSelectedOption] = useState(null); const options = ['Opcija 1', 'Opcija 2', 'Opcija 3']; const toggleDropdown = () => { setIsOpen(!isOpen); }; const selectOption = (opcija) => { setSelectedOption(option); setIsOpen(false); }; return ( <div> <button onClick={toggleDropdown}> {selectedOption ? selectedOption : 'Odaberite opciju'} </button> {isOpen && ( <ul> {options.map((option, index) => ( <li key={index} onClick)(opcija)(option>select=Option>) ))} </ul> )} </div> ); }; izvoz podrazumevani padajući meni;
Da bismo testirali odabir opcije, morat ćemo simulirati klik na jednu od opcija i provjeriti je li odabrana opcija ispravno ažurirana. Evo testa:
import React from 'react'; import { plitko } iz 'enzima'; uvoz padajućeg menija iz './Dropdown'; describe('Dropdown', () => { it('treba odabrati opciju kada se klikne', () => { const wrapper = plitko(<Dropdown />); const button = wrapper.find('button'); // Otvorite padajući gumb button.simulate('click'); // Pronađite prvu opciju i kliknite na nju = wrapper.'fir (st firstOption);'fir). firstOption.simulate('click') // Provjera da li je odabrana opcija ažurirana (wrapper.find('button').toBe('Option 1');
U ovom testu prvo otvaramo padajući meni klikom na dugme. Zatim pronalazimo prvu opciju koristećiprvoi simulirati klik na njega. Na kraju, provjeravamo da li je tekst gumba ažuriran tako da odražava odabranu opciju.
Testiranje sa složenijim padajućim izbornikom
U aplikacijama u stvarnom svijetu, padajući izbornik može biti mnogo složeniji od naših jednostavnih primjera. Možda imaju ugniježđene opcije, prilagođeni stil ili asinkrono učitavanje podataka. Prilikom testiranja ovih složenijih padajućih izbornika, morat ćete prema tome prilagoditi svoju strategiju testiranja.
Na primjer, ako vaš padajući izbornik ima ugniježđene opcije, morat ćete testirati ponašanje i roditeljske i podređene opcije. Možda ćete također morati koristiti naprednije birače enzima da pronađete određene elemente u padajućem izborniku.
Ako vaš padajući meni asinhrono učitava podatke, morat ćete koristiti tehnike kao što suasync/awaitilisetTimeoutda sačekate da se podaci učitaju prije pokretanja testova. Evo primjera testiranja asinhronog padajućeg menija:
import React, { useState, useEffect } iz 'react'; const AsyncDropdown = () => { const [isOpen, setIsOpen] = useState(false); const [opcije, setOpcije] = useState([]); useEffect(() => { const fetchOptions = async () => { const response = await fetch('https://api.example.com/options'); const data = await response.json(); setOptions(data); }; if (isOpen) { fetchOptions(); O} });, [isOpen]); const toggleDropdown = () => { setIsOpen(!isOpen); }; return ( <div> <button onClick={toggleDropdown}>Prebaci padajući meni</button> {isOpen && ( <ul> {options.map((option, index) => ( <li key={index}>{option}</li> ))} </ul> )} </div> ); }; izvoz podrazumevani AsyncDropdown;
import React from 'react'; import { plitko } iz 'enzima'; import AsyncDropdown iz './AsyncDropdown'; describe('AsyncDropdown', () => { it('treba učitati opcije kada je padajući meni otvoren', async () => { global.fetch = jest.fn(() => Promise.resolve({ json: () => Promise.resolve(['Opcija 1', 'Opcija', 'Opcija', 'Opcija', 'Opcija', 2)} wrapper = plitko(<AsyncDropdown />) // Otvaranje padajućeg izbornika ('click');
U ovom testu koristimois.fnrugati sedohvatiAPI i vrati neke uzorke podataka. Zatim otvaramo padajući meni i čekamo da se opcije učitaju koristećičekaj wrapper.update(). Na kraju, provjeravamo da li je prikazan tačan broj opcija.
Zaključak
Testiranje padajućih menija u komponentama React s Enzymeom je bitan dio osiguranja kvaliteta i pouzdanosti vaših aplikacija. Prateći tehnike navedene u ovom postu na blogu, možete napisati efikasne testove za jednostavne i složene padajuće menije.
Ako tražite visokokvalitetne Enzyme proizvode za vaše potrebe testiranja, mi smo tu da vam pomognemo. U ponudi imamo i niz drugih proizvoda, kao nprVitamin B12 farmaceutske kvalitete Cas 13422-55-4 metilkobalamin u prahu,Tvornička cijena Nano Graphene Powder, iKapsula Krill Oil.
Ako ste zainteresirani za kupovinu bilo kojeg od naših proizvoda ili imate bilo kakva pitanja, slobodno nas kontaktirajte za raspravu o nabavci. Uvijek nam je drago pomoći!


Reference
- Enzimska dokumentacija: https://enzymejs.github.io/enzyme/
- React Testing Library: https://testing-library.com/docs/react-testing-library/intro/