Ahoj, kolegovia vývojári Reactu! Dnes budem hovoriť o tom, ako testovať rozbaľovacie zoznamy v komponentoch React s enzýmom. Ako dodávateľ Enzyme som z prvej ruky videl dôležitosť správneho testovania v projektoch React, najmä pokiaľ ide o tie otravné rozbaľovacie zoznamy.
Prečo je testovanie rozbaľovacích zoznamov dôležité
Rozbaľovacie zoznamy sú bežnou súčasťou používateľského rozhrania v aplikáciách React. Používajú sa na veci, ako je výber možností, filtrovanie údajov a navigácia v ponukách. Ale môžu byť tiež zložité dostať sa správne. Malá chyba v rozbaľovacej ponuke môže viesť k zlej používateľskej skúsenosti, napríklad možnosti sa nezobrazia správne alebo sa rozbaľovacia ponuka nezatvorí, keď by mala.
Tu prichádza na rad testovanie. Napísaním testov pre svoje rozbaľovacie zoznamy môžete tieto chyby zachytiť na začiatku procesu vývoja, skôr ako sa dostanú do výroby. A práve na to je Enzyme skvelý nástroj.
Začíname s enzýmom
Predtým, ako sa vrhneme na testovacie rozbaľovacie zoznamy, prejdime si rýchlo, ako nastaviť Enzyme vo vašom projekte React. Ak ste tak ešte neurobili, budete si musieť nainštalovať Enzyme a jeho adaptér pre React. Môžete to urobiť pomocou npm alebo priadze:
npm install --save-dev enzyme enzyme-adapter-react-16
Po nainštalovaní Enzyme ho budete musieť nakonfigurovať tak, aby fungoval s vašou verziou React. Vo vašom testovacom inštalačnom súbore (zvyčajnesrc/setupTests.js), pridajte nasledujúci kód:
importovať enzým z „enzýmu“; importovať adaptér z 'enzyme-adapter-react-16'; Enzyme.configure({ adaptér: new Adapter() });
Teraz ste pripravení začať testovať!
Testovanie jednoduchého rozbaľovacieho zoznamu
Začnime testovaním jednoduchého rozbaľovacieho komponentu. Tu je príklad základného rozbaľovacieho zoznamu v React:
importovať Reagovať, { useState } z 'reagovať'; const Dropdown = () => { const [isOpen, setIsOpen] = useState(false); const options = ['Možnosť 1', 'Možnosť 2', 'Možnosť 3']; const toggleDropdown = () => { setIsOpen(!isOpen); }; return ( <div> <button onClick={toggleDropdown}>Prepnúť rozbaľovaciu ponuku</button> {isOpen && ( <ul> {options.map((option, index) => ( <li key={index}>{option}</li> ))} </ul> )} </div> ); }; exportovať predvolenú rozbaľovaciu ponuku;
Ak chcete otestovať túto rozbaľovaciu ponuku, chceme sa uistiť, že kliknutím na tlačidlo sa prepína viditeľnosť zoznamu možností. Tu je návod, ako to môžeme urobiť pomocou Enzýmu:
import Reagovať z 'reagovať'; import { plytké } z 'enzýmu'; importovať rozbaľovaciu ponuku z './Dropdown'; description('Dropdown', () => { it('má prepnúť rozbaľovaciu ponuku, keď sa klikne na tlačidlo', () => { const wrapper = plytký(<Dropdown />); const button = wrapper.find('button'); // Na začiatku by mala byť rozbaľovacia ponuka zatvorená. button.simulate('kliknutie') expect(wrapper.find('ul').exists()).toBe(true) // Opätovným kliknutím na tlačidlo zatvoríte rozbaľovaciu ponuku.simulate('click').exists()).toBe(false });
V tomto teste najprv použijemeplytkévykresliťRozbaľovacia ponukakomponent. Potom nájdeme tlačidlo pomocounájsťa simulovať udalosť kliknutia pomocousimulovať. Nakoniec používameexistujeskontrolujte, či je zoznam možností viditeľný alebo nie.
Testovanie rozbaľovacieho výberu
Teraz poďme o krok ďalej a otestujme výber možnosti v rozbaľovacej ponuke. Upravíme našeRozbaľovacia ponukakomponent na spracovanie výberu možností:
importovať Reagovať, { useState } z 'reagovať'; const Dropdown = () => { const [isOpen, setIsOpen] = useState(false); const [selectedOption, setSelectedOption] = useState(null); const options = ['Možnosť 1', 'Možnosť 2', 'Možnosť 3']; const toggleDropdown = () => { setIsOpen(!isOpen); }; const selectOption = (možnosť) => { setSelectedOption (možnosť); setIsOpen(false); }; return ( <div> <button onClick={toggleDropdown}> {selectedOption ? selectedOption : 'Vyberte možnosť'} </button> {isOpen && ( <ul> {options.map((option, index) => ( <li key={index} onClick={() => selectOption(option}))} {</li> selectOption(option}))}} </div> ); }; exportovať predvolenú rozbaľovaciu ponuku;
Ak chcete otestovať výber možnosti, budeme musieť simulovať kliknutie na jednu z možností a skontrolovať, či je vybratá možnosť správne aktualizovaná. Tu je test:
import Reagovať z 'reagovať'; import { plytké } z 'enzýmu'; importovať rozbaľovaciu ponuku z './Dropdown'; description('Dropdown', () => { it('po kliknutí by ste mali vybrať možnosť', () => { const wrapper = plytký(<Dropdown />); const button = wrapper.find('button'); // Otvorte rozbaľovaciu ponuku button.simulate('click'); // Nájdite prvú možnosť a kliknite na ňu const firstOption('findfirst = wrapper.'). firstOption.simulate('click' // Kontrola, či je vybratá možnosť aktualizovaná expect(wrapper.find('button').text()).toBe('Voľba 1' });
V tomto teste najskôr otvoríme rozbaľovaciu ponuku kliknutím na tlačidlo. Potom nájdeme prvú možnosť pomocounajprva simulovať kliknutie naň. Nakoniec skontrolujeme, či bol text tlačidla aktualizovaný tak, aby odrážal vybratú možnosť.
Testovanie s komplexnejšími rozbaľovacími ponukami
V aplikáciách v reálnom svete môžu byť rozbaľovacie zoznamy oveľa zložitejšie ako naše jednoduché príklady. Môžu mať vnorené možnosti, vlastný štýl alebo asynchrónne načítanie údajov. Pri testovaní týchto zložitejších rozbaľovacích zoznamov budete musieť zodpovedajúcim spôsobom prispôsobiť svoju testovaciu stratégiu.
Ak napríklad vaša rozbaľovacia ponuka obsahuje vnorené možnosti, budete musieť otestovať správanie rodičovskej aj podradenej možnosti. Možno budete musieť použiť aj pokročilejšie selektory enzýmov, aby ste našli konkrétne prvky v rozbaľovacej ponuke.
Ak vaša rozbaľovacia ponuka načítava údaje asynchrónne, budete musieť použiť techniky ako naprasync/čakaťalebosetTimeoutpred spustením testov počkajte na načítanie údajov. Tu je príklad testovania asynchrónneho rozbaľovacieho zoznamu:
import React, { useState, useEffect } z 'react'; const AsyncDropdown = () => { const [isOpen, setIsOpen] = useState(false); const [options, setOptions] = useState([]); useEffect(() => { const fetchOptions = async () => { const response = wait fetch('https://api.example.com/options'); const data = wait response.json(); setOptions(data); }; if (isOpen) { fetchOptions(); } }, [isOpen]); const toggleDropdown = () => { setIsOpen(!isOpen); }; return ( <div> <button onClick={toggleDropdown}>Prepnúť rozbaľovaciu ponuku</button> {isOpen && ( <ul> {options.map((option, index) => ( <li key={index}>{option}</li> ))} </ul> )} </div> ); }; exportovať predvolenú AsyncDropdown;
import Reagovať z 'reagovať'; import { plytké } z 'enzýmu'; importovať AsyncDropdown z './AsyncDropdown'; description('AsyncDropdown', () => { it('má načítať možnosti pri otvorení rozbaľovacej ponuky', async () => { global.fetch = jest.fn(() => Promise.resolve({ json: () => Promise.resolve(['Voľba 1', ',)} 'Option 2');'Option 2 wrapper = plytko(<AsyncDropdown /> tlačidlo const = wrapper.find('tlačidlo') // Otvorenie rozbaľovacieho zoznamu button.simulate('click' // Počkajte, kým sa načítajú možnosti wrapper.update( // Kontrola, či sú načítané možnosti wait('li').length});
V tomto teste používameis.fnposmievať saaportAPI a vrátiť nejaké vzorové údaje. Potom otvoríme rozbaľovaciu ponuku a počkáme, kým sa možnosti načítajú pomocoučakať wrapper.update(). Nakoniec skontrolujeme, či je vykreslený správny počet možností.
Záver
Testovanie rozbaľovacích zoznamov v komponentoch React s Enzyme je nevyhnutnou súčasťou zabezpečenia kvality a spoľahlivosti vašich aplikácií. Dodržiavaním techník uvedených v tomto blogovom príspevku môžete písať efektívne testy pre jednoduché aj zložité rozbaľovacie zoznamy.
Ak hľadáte vysokokvalitné produkty Enzyme pre vaše potreby testovania, sme tu, aby sme vám pomohli. V ponuke máme aj rad ďalších produktov, ako naprVitamín B12 farmaceutickej kvality Cas 13422-55-4 Metylkobalamínový prášok,Výrobná cena Nano grafénový prášok, aKapsula s krillovým olejom.
Ak máte záujem o kúpu niektorého z našich produktov alebo máte nejaké otázky, neváhajte nás kontaktovať pre diskusiu o obstarávaní. Vždy radi pomôžeme!


Referencie
- Enzýmová dokumentácia: https://enzymejs.github.io/enzyme/
- React Testing Library: https://testing-library.com/docs/react-testing-library/intro/