Тестването на манипулатори на събития в компонентите на React е решаващ аспект за гарантиране на надеждността и функционалността на вашите приложения. Enzyme, популярна помощна програма за тестване за React, предоставя мощен набор от инструменти за опростяване на този процес. Като доставчик на Enzyme, ние разбираме предизвикателствата, пред които са изправени разработчиците, когато става въпрос за тестване на React компоненти, особено манипулатори на събития. В тази публикация в блога ще проучим как ефективно да тестваме манипулатори на събития в React компоненти с помощта на Enzyme.
Разбиране на манипулаторите на събития в React
Преди да се потопите в тестването, важно е да разберете какво представляват манипулаторите на събития в React. Обработчиците на събития са функции, които се задействат в отговор на определени събития, като щраквания, натискания на клавиши или изпращане на формуляр. В React тези манипулатори обикновено се дефинират като методи в рамките на клас компонент или като функции със стрелки във функционални компоненти.
Ето прост пример за функционален React компонент с манипулатор на събития:
импортиране на React от 'react'; const ButtonComponent = () => { const handleClick = () => { console.log('Щракнат бутон!'); }; return ( <button onClick={handleClick}>Щракни ме</button>); }; експортиране по подразбиране ButtonComponent;
В този пример,handleClickфункцията е манипулатор на събития, който се извиква при щракване върху бутона.
Настройване на ензима за тестване
За да започнете да тествате манипулатори на събития с Enzyme, трябва да настроите вашата среда за тестване. Първо се уверете, че сте инсталирали Enzyme и неговия адаптер във вашия проект. Можете да ги инсталирате с помощта на npm или yarn:
npm install --save-dev ензим enzyme-adapter-react-16
След това конфигурирайте Enzyme да използва подходящия адаптер във вашия тестов инсталационен файл. За React 16 можете да използвате следния код:
импортиране на ензим от „ензим“; импортиране на адаптер от 'enzyme-adapter-react-16'; Enzyme.configure({ адаптер: нов адаптер() });
Тестване на манипулатори на събития с Enzyme
След като вашата среда за тестване е настроена, нека да разгледаме как да тестваме манипулатори на събития с помощта на Enzyme. Enzyme предоставя няколко метода за симулиране на събития на React компоненти, като напрсимулира.
Симулиране на събитие с кликване
Нека тествамеButtonComponentдефинирахме по-рано. Ето как можете да симулирате събитие за кликване и да проверите дали манипулаторът на събитието е извикан:
импортиране на React от 'react'; импорт { плитък } от 'ензим'; импортиране на ButtonComponent от './ButtonComponent'; describe('ButtonComponent', () => { it('трябва да извика handleClick, когато се щракне върху бутона', () => { const wrapper = shallow(<ButtonComponent />); const spy = jest.spyOn(wrapper.instance(), 'handleClick'); wrapper.instance().forceUpdate(); wrapper.find('button').simulate('click'); очаквай(spy).toHaveBeenCalled(});
В този тест първо създаваме плитко изобразяване наButtonComponentс помощта на ензимиплитъкметод. След това създаваме шпионин наhandleClickфункция с помощта на Jest'sspyOnметод. След това принуждаваме актуализация на екземпляра на компонента, за да гарантираме, че шпионката е прикрепена правилно. Накрая симулираме събитие на щракване върху бутона с помощта насимулираметод и проверете дали шпионинът е извикан.
Тестване на манипулатори на събития с аргументи
Понякога манипулаторите на събития могат да приемат аргументи. Например, разгледайте следния компонент:
импортиране на React от 'react'; const InputComponent = () => { const handleChange = (event) => { console.log('Входната стойност е променена:', event.target.value); }; връщане ( <input type="text" onChange={handleChange} /> ); }; експортиране по подразбиране InputComponent;
За да тестваме този компонент, трябва да предадем обект на събитие къмсимулираметод. Ето как можете да го направите:
импортиране на React от 'react'; импорт { плитък } от 'ензим'; импортиране на InputComponent от './InputComponent'; describe('InputComponent', () => { it('трябва да извика handleChange с правилна стойност при промяна на входа', () => { const wrapper = shallow(<InputComponent />); const spy = jest.spyOn(wrapper.instance(), 'handleChange'); wrapper.instance().forceUpdate(); const event = {target: {value: 'test' } }; wrapper.find('input').simulate('change', event);expect(spy).toHaveBeenCalledWith(event) });
В този тест ние създаваме обект на фиктивно събитие с aцелсвойство, съдържащо новата входна стойност. След това предаваме този обект на събитие като втори аргумент насимулираметод. Накрая проверяваме, чеhandleChangeфункцията е извикана с правилния обект на събитие.
Тестване на сложни манипулатори на събития
В някои случаи манипулаторите на събития може да имат сложна логика, като например извършване на API извиквания или актуализиране на състоянието на компонента. За да тествате тези типове манипулатори на събития, може да се наложи да използвате допълнителни техники за тестване, като например подигравка на външни зависимости.
Например, разгледайте следния компонент, който прави извикване на API, когато се щракне върху бутон:
импортиране на React от 'react'; импортиране на axios от 'axios'; const ApiComponent = () => { const handleClick = async () => { try { const response = await axios.get('https://api.example.com/data'); console.log('API отговор:', response.data); } catch (грешка) { console.error('API грешка:', грешка); } }; връщане ( <button onClick={handleClick}>Извличане на данни</button>); }; експортиране на ApiComponent по подразбиране;
За да тестваме този компонент, можем да използваме Jest'sis.mockфункция за подигравка нааксиосмодул. Ето как можете да го направите:
импортиране на React от 'react'; импорт { плитък } от 'ензим'; импортиране на ApiComponent от './ApiComponent'; импортиране на axios от 'axios'; jest.mock('axios'); describe('ApiComponent', () => { it('трябва да извика axios.get, когато се щракне върху бутона', async () => { const wrapper = shallow(<ApiComponent />); const spy = jest.spyOn(wrapper.instance(), 'handleClick'); wrapper.instance().forceUpdate(); const mockResponse = {data: {съобщение: 'Успех' }; axios.mockResponse('button').expect(axios.get).
В този тест първо се подиграваме нааксиосизползване на модулis.mock. След това създаваме обект с фалшив отговор и го задаваме като разрешена стойност наaxios.getизползване на методmockResolvedValue. Накрая симулираме събитие на щракване върху бутона и проверяваме далиhandleClickе извикана функция и товаaxios.getе извикан с правилния URL адрес.
Заключение
Тестването на манипулатори на събития в компонентите на React е важна част от осигуряването на качеството и надеждността на вашите приложения. Enzyme предоставя мощен набор от инструменти за опростяване на този процес, като ви позволява да симулирате събития и да проверите дали вашите манипулатори на събития работят според очакванията.


Като доставчик на ензими, ние предлагаме широка гама от продукти и услуги, за да ви помогнем с вашите нужди от тестване. Ако се интересувате от закупуване на нашите продукти или обсъждане на вашите изисквания за тестване, моля не се колебайте да се свържете с нас за преговори за доставка.
Предлагаме и разнообразие от билкови екстракти, които могат да ви заинтересуват. Разгледайте нашитеЕкстракт от Юка Рострата/Юка Шидигера на прах,Масло от сладък бадем, иЕкстракт от иглена гъба 97% чист екстракт от гъба, използван за обновяване на кожата.
Референции
- Документация на React: https://reactjs.org/docs/handling-events.html
- Документация за ензима: https://enzymejs.github.io/enzyme/
- Документация за Jest: https://jestjs.io/docs/getting-started