Как да тествам модални прозорци в React компоненти с Enzyme?

Jan 21, 2026

Остави съобщение

Д -р Емили Картър
Д -р Емили Картър
Като директор на изследванията за здравословна храна в Asclepius, аз ръководя нашия екип в разработването на авангардни растителни екстрактни прахове. С повече от десетилетие опит в химията на природни продукти, аз съм страстен да създавам иновативни решения, които използват силата на природата.

Здравейте, колеги разработчици на React! Ако работите с React компоненти и се занимавате с модални, знаете колко трудно може да бъде да ги тествате правилно. Това е мястото, където Enzyme е супер полезен. И познайте какво? Аз съм доставчик на Enzyme, така че имам страхотни прозрения, които да споделя с вас за това как да тествате модали в компонентите на React с помощта на Enzyme.

Първо, нека бързо разберем какво е ензим. Enzyme е помощна програма за тестване на JavaScript за React, която улеснява заявяването, манипулирането и преминаването на изхода на компонентите на React. Той предоставя набор от полезни методи за тестване на React компоненти по по-интуитивен начин. Що се отнася до модалите в React, искаме да сме сигурни, че те се отварят и затварят правилно, че съдържанието вътре се показва според очакванията и че всички взаимодействия с модала работят по предназначение.

Настройване на вашия проект

Преди да започнем да тестваме модалите, трябва да настроите Enzyme във вашия проект. Ако все още не сте го направили, можете да го инсталирате с помощта на npm или yarn. Просто изпълнете следната команда във вашия терминал:

npm install --save-dev ензим enzyme-adapter-react-16

Това ще инсталира Enzyme и адаптера за React 16. Ако използвате различна версия на React, не забравяйте да инсталирате подходящия адаптер.

След като инсталирате Enzyme, трябва да го конфигурирате във вашия тестов инсталационен файл. Ето пример как можете да го направите:

импортиране на ензим от „ензим“; импортиране на адаптер от 'enzyme-adapter-react-16'; Enzyme.configure({ адаптер: нов адаптер() });

Тестване на модална видимост

Едно от първите неща, които искаме да тестваме, когато става дума за модали, е тяхната видимост. Модалът трябва да се отвори, когато се задейства конкретно действие, като щракване върху бутон. Да кажем, че имаме прост React компонент с бутон, който отваря модал:

импортиране на React, {useState} от 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const openModal = () => { setIsModalOpen(true); }; return ( <div> <button onClick={openModal}>Отваряне на модал</button> {isModalOpen && <div className="modal">Това е модал</div>} </div> ); }; експортиране по подразбиране ModalComponent;

За да проверим дали модалът се отваря при натискане на бутона, можем да използваме Enzyme'sплитъкметод на изобразяване. Ето кода на теста:

импортиране на React от 'react'; импорт { плитък } от 'ензим'; импортиране на ModalComponent от './ModalComponent'; describe('ModalComponent', () => { it('трябва да отвори модала, когато се щракне върху бутона', () => { const wrapper = shallow(<ModalComponent />); const button = wrapper.find('button'); button.simulate('click'); expect(wrapper.find('.modal').exists()).toBe(true); }); });

В този тест първо рендерираме повърхностноМодален компонент. След това намираме бутона с помощта наwrapper.find('бутон')и симулирайте събитие с щракване върху него. Накрая проверяваме дали модалният елемент е с класакапиталсъществува в изхода на компонента.

Тестване на модално съдържание

След като сме тествали видимостта на модала, може да поискаме да тестваме и съдържанието вътре в модала. Например, ако модалът показва някакви динамични данни, искаме да сме сигурни, че се изобразява правилно. Нека актуализираме нашитеМодален компонентза показване на някои динамични данни:

импортиране на React, {useState} от 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [modalData, setModalData] = useState('Някои първоначални данни'); const openModal = () => { setIsModalOpen(true); }; return ( <div> <button onClick={openModal}>Open Modal</button> {isModalOpen && <div className="modal">{modalData}</div>} </div> ); }; експортиране по подразбиране ModalComponent;

Сега нека напишем тест, за да проверим дали модалното съдържание е правилно:

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

импортиране на React от 'react'; импорт { плитък } от 'ензим'; импортиране на ModalComponent от './ModalComponent'; describe('ModalComponent', () => { it('трябва да показва правилното модално съдържание', () => { const wrapper = shallow(<ModalComponent />); const button = wrapper.find('button'); button.simulate('click'); expect(wrapper.find('.modal').text()).toBe('Някои първоначални данни'); }); });

В този тест следваме процес, подобен на предишния. Изобразяваме плитко компонента, щракваме върху бутона, за да отворим модала, и след това проверяваме дали текстът вътре в модала е равен на очакваните данни.

Тестване на модално затваряне

Точно както тестваме отварянето на модала, трябва да тестваме и затварящата му функционалност. Нека добавим бутон за затваряне към нашияМодален компонент:

импортиране на React, {useState} от 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [modalData, setModalData] = useState('Някои първоначални данни'); const openModal = () => { setIsModalOpen(true); }; const closeModal = () => { setIsModalOpen(false); }; return ( <div> <button onClick={openModal}>Отваряне на модал</button> {isModalOpen && ( <div className="modal"> {modalData} <button onClick={closeModal}>Затваряне на модал</button> </div> )} </div> ); }; експортиране по подразбиране ModalComponent;

Сега нека напишем тест, за да проверим дали модалът се затваря, когато се щракне върху бутона за затваряне:

импортиране на React от 'react'; импорт { плитък } от 'ензим'; импортиране на ModalComponent от './ModalComponent'; describe('ModalComponent', () => { it('трябва да затвори модала, когато се щракне върху бутона за затваряне', () => { const wrapper = shallow(<ModalComponent />); const openButton = wrapper.find('button').first(); openButton.simulate('click'); const closeButton = wrapper.find('.modal button'); closeButton.simulate('click'); очаквай(wrapper.find('.modal').exists()).toBe(false});

В този тест първо отваряме модала, като щракваме върху бутона за отваряне. След това намираме бутона за затваряне вътре в модала и симулираме събитие за щракване върху него. Накрая проверяваме дали модалният елемент вече не съществува в изхода на компонента.

По-сложно модално тестване

Понякога модалите могат да бъдат по-сложни, с множество състояния и взаимодействия. Например, един модал може да има формуляр вътре в него и ние трябва да тестваме дали подаването на формуляра работи правилно. Нека добавим проста форма към нашатаМодален компонент:

импортиране на React, {useState} от 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [modalData, setModalData] = useState('Някои първоначални данни'); 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}>Open Modal</button> {isModalOpen && ( <div className="modal"> <form onSubmit={handleSubmit}> <input type="text" value={formData} onChange={(e) => setFormData(e.target.value)} /> <button type="submit">Изпращане</button> </form> <button onClick={closeModal}>Затваряне на модал</button> </div> )} </div> ); }; експортиране по подразбиране ModalComponent;

Сега нека напишем тест, за да проверим дали подаването на формуляра актуализира модалните данни и затваря модала:

импортиране на React от 'react'; импорт { плитък } от 'ензим'; импортиране на ModalComponent от './ModalComponent'; describe('ModalComponent', () => { it('трябва да актуализира модалните данни и да затвори модала при подаване на формуляр', () => { const wrapper = shallow(<ModalComponent />); const openButton = wrapper.find('button').first(); openButton.simulate('click'); const input = wrapper.find('input'); input.simulate('change', { value: 'New data' }); const form = wrapper.find('form'); form.simulate('submit', { preventDefault: () => {} }); expect(wrapper.find('.modal').exists()).expect(wrapper.instance().state.modalData).toBe('New данни');

В този тест първо отваряме модала, след което симулираме събитие за промяна в полето за въвеждане, за да актуализираме данните на формуляра. След това симулираме събитие за подаване на формуляр и проверяваме дали модалът е затворен и дали модалните данни са актуализирани правилно.

Заключение

Тестването на модали в компонентите на React с Enzyme може да изглежда малко обезсърчително в началото, но след като го овладеете, става лесно. Като следвате стъпките и примерите, които споделих тук, трябва да можете да тествате вашите модали ефективно и да се уверите, че работят според очакванията.

Ако търсите висококачествени ензимни продукти за вашите нужди за тестване, не се колебайтесвържете се с насза повече информация. Ние сме тук, за да ви помогнем да направите процеса на тестване възможно най-гладък.

И ако се интересувате от други продукти, вижте тези връзки:

Референции

  • Ензимна документация
  • Документация на библиотеката за тестване на React
  • Реагирайте на официалната документация
Изпрати запитване