چگونه می‌توان ماژول‌ها را در کامپوننت‌های React با Enzyme تست کرد؟

Jan 21, 2026

پیام بگذارید

دکتر امیلی کارتر
دکتر امیلی کارتر
من به عنوان مدیر تحقیقات مواد غذایی بهداشتی در Asclepius ، من تیم خود را در توسعه پودرهای عصاره گیاهی برش هدایت می کنم. با بیش از یک دهه تجربه در شیمی محصولات طبیعی ، من علاقه مند به ایجاد راه حل های نوآورانه هستم که قدرت طبیعت را مهار می کند.

سلام، همکار توسعه دهندگان React! اگر با کامپوننت‌های React کار می‌کنید و با مدال‌ها سر و کار دارید، می‌دانید که آزمایش درست آنها چقدر دشوار است. اینجاست که Enzyme بسیار مفید است. و حدس بزنید چی؟ من یک تامین کننده آنزیم هستم، بنابراین بینش های خوبی در مورد نحوه آزمایش مودال در اجزای React با استفاده از Enzyme با شما به اشتراک می گذارم.

ابتدا اجازه دهید به سرعت بفهمیم که آنزیم چیست. Enzyme یک ابزار تست جاوا اسکریپت برای React است که ادعا کردن، دستکاری و عبور از خروجی اجزای React را آسان‌تر می‌کند. مجموعه ای از روش های مفید برای آزمایش مؤلفه های React به روشی شهودی تر ارائه می دهد. وقتی صحبت از مدال در React به میان می‌آید، می‌خواهیم مطمئن شویم که آنها به درستی باز و بسته می‌شوند، محتوای داخل آن‌طور که انتظار می‌رود نمایش داده می‌شود، و هر گونه تعامل با مدال همانطور که در نظر گرفته شده است، کار می‌کند.

راه اندازی پروژه شما

قبل از شروع آزمایش مدال ها، باید Enzyme را در پروژه خود راه اندازی کنید. اگر قبلا این کار را انجام نداده اید، می توانید آن را با استفاده از npm یا yarn نصب کنید. کافیست دستور زیر را در ترمینال خود اجرا کنید:

npm نصب --save-dev enzyme enzyme-adapter-react-16

با این کار Enzyme و آداپتور React 16 نصب می شود. اگر از نسخه دیگری از React استفاده می کنید، مطمئن شوید که آداپتور مناسب را نصب کرده اید.

هنگامی که Enzyme را نصب کردید، باید آن را در فایل تنظیمات آزمایشی خود پیکربندی کنید. در اینجا مثالی از نحوه انجام این کار آورده شده است:

واردات آنزیم از "آنزیم". واردات آداپتور از 'enzyme-adapter-react-16'; Enzyme.configure({ adapter: new Adapter() });

تست دید مودال

یکی از اولین چیزهایی که می خواهیم در مورد مودال ها آزمایش کنیم، دید آنهاست. زمانی که یک عمل خاص مانند کلیک کردن روی یک دکمه فعال می شود، یک مدال باید باز شود. فرض کنید یک کامپوننت ساده React با دکمه ای داریم که یک مدال را باز می کند:

وارد کردن React، { useState } از 'react'; const ModalComponent = () => { const [isModalOpen, setIsModalOpen] = useState(false); const openModal = () => { setIsModalOpen(true); }; return ( <div> <button onClick={openModal}>Open Modal</button> {isModalOpen && <div className="modal">این یک مودال است</div>} </div> ); }; صادرات پیش فرض ModalComponent.

برای آزمایش اینکه آیا با کلیک روی دکمه مدال باز می شود، می توانیم از Enzyme استفاده کنیمکم عمقروش رندرینگ این هم کد تست:

import React از 'react'; import { shallow } از 'enzyme'; وارد کردن ModalComponent از './ModalComponent'; describe('ModalComponent', () => { it('وقتی روی دکمه کلیک می شود باید مودال را باز کند', () => {const wrapper = shallow(<ModalComponent />); const button = wrapper.find('button'); button.simulate('click'); expect(wrapper.find).(Best));(wrapper.find).(exists. })؛

در این تست، ابتدا به صورت سطحی رندر می کنیمModalComponent. سپس دکمه را با استفاده از آن پیدا می کنیمwrapper.find('button')و یک رویداد کلیک روی آن شبیه سازی کنید. در نهایت، بررسی می کنیم که آیا عنصر modal با کلاس است یا خیرسرمایهدر خروجی کامپوننت وجود دارد.

تست محتوای مدال

هنگامی که نمایان بودن مدال را آزمایش کردیم، ممکن است بخواهیم محتوای داخل مودال را نیز آزمایش کنیم. برای مثال، اگر مدال برخی از داده‌های پویا را نمایش می‌دهد، می‌خواهیم مطمئن شویم که به درستی رندر شده است. بیایید خود را به روز کنیمModalComponentبرای نمایش برخی از داده های پویا:

وارد کردن 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

import React از 'react'; import { shallow } از 'enzyme'; وارد کردن ModalComponent از './ModalComponent'; describe('ModalComponent', () => { it('should display the modal content', () => {const wrapper = shallow(<ModalComponent />); const button = wrapper.find('button'); button.simulate('click'); expect(wrapper.find('ext'.modal));t'). })؛

در این تست نیز روند مشابه قبلی را دنبال می کنیم. کامپوننت را به صورت سطحی رندر می کنیم، روی دکمه کلیک می کنیم تا مودال باز شود و سپس بررسی می کنیم که آیا متن داخل مودال برابر با داده های مورد انتظار است.

تست بسته شدن مدال

درست مانند تست باز شدن مودال، باید عملکرد بسته شدن آن را نیز آزمایش کنیم. بیایید یک دکمه بستن به ما اضافه کنیمModalComponent:

وارد کردن 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}>Open Modal</button> {isModalOpen && ( <div className="modal"> {modalData} <button onClick={closeModal}>Close Modal</button> </div> )} </div>); }; صادرات پیش فرض ModalComponent.

اکنون، بیایید آزمایشی بنویسیم تا بررسی کنیم که آیا با کلیک روی دکمه بستن، مدال بسته می‌شود یا خیر:

import React از 'react'; import { shallow } از 'enzyme'; وارد کردن ModalComponent از './ModalComponent'; describe('ModalComponent', () => { it('وقتی دکمه بستن کلیک می شود باید مودال را ببندد', () => {const wrapper = shallow(<ModalComponent />); const openButton = wrapper.find('button').first(); openButton.simulate('contrapper.Bdalut'); button');

در این تست ابتدا مودال را با زدن دکمه open باز می کنیم. سپس دکمه بستن را در داخل مدال پیدا می کنیم و یک رویداد کلیک را روی آن شبیه سازی می کنیم. در نهایت، بررسی می کنیم که آیا عنصر مدال دیگر در خروجی کامپوننت وجود ندارد.

تست مودال پیچیده تر

گاهی اوقات، مدال‌ها می‌توانند پیچیده‌تر باشند، با چندین حالت و تعامل. به عنوان مثال، یک مدال ممکن است یک فرم در داخل خود داشته باشد، و ما باید آزمایش کنیم که آیا فرم ارسالی به درستی کار می کند یا خیر. بیایید یک فرم ساده به خود اضافه کنیمModalComponent:

وارد کردن 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(); }; بازگشت ( <div> <button onClick={openModal}>Open Modal</button> {isModalOpen && ( <div className="modal"> <form onSubmit={handleSubmit}> <input type="text" value={formData} onChange={(e)atavalue.Tarm type="submit">ارسال</button> </form> <button onClick={closeModal}>Close Modal</button> </div> )} </div> ); }; صادرات پیش فرض ModalComponent.

اکنون، بیایید یک آزمایش بنویسیم تا بررسی کنیم که آیا فرم ارسالی، داده‌های مودال را به‌روزرسانی می‌کند و مدال را می‌بندد:

import React از 'react'; import { shallow } از 'enzyme'; وارد کردن ModalComponent از './ModalComponent'; describe('ModalComponent', () => { it('باید داده های مودال را به روز کند و مودال را هنگام ارسال فرم ببندد', () => {const wrapper = shallow(<ModalComponent />); const openButton = wrapper.find('button').first(); openButton.simulate('conspperfinput); input.simulate('change', { target: { value: 'New data' } } const form = wrapper.find('form', { preventDefault: () => {} }); expect(wrapper.instance().state.modalData).toBe('New data' });

در این تست ابتدا مدال را باز می کنیم، سپس یک رویداد تغییر را در فیلد ورودی شبیه سازی می کنیم تا داده های فرم به روز شود. در مرحله بعد، یک رویداد ارسال فرم را شبیه‌سازی می‌کنیم و بررسی می‌کنیم که آیا modal بسته است و داده‌های modal به درستی به‌روزرسانی شده‌اند.

نتیجه گیری

آزمایش مودال‌ها در اجزای React با Enzyme در ابتدا می‌تواند کمی دلهره‌آور به نظر برسد، اما وقتی به آن دست پیدا کردید، به یک نسیم تبدیل می‌شود. با دنبال کردن مراحل و مثال‌هایی که در اینجا به اشتراک گذاشته‌ام، باید بتوانید مدال‌های خود را به طور موثر آزمایش کنید و مطمئن شوید که مطابق انتظار عمل می‌کنند.

اگر به دنبال محصولات آنزیمی با کیفیت بالا برای نیازهای آزمایشی خود هستید، دریغ نکنیدبا ما تماس بگیریدبرای اطلاعات بیشتر ما اینجا هستیم تا به شما کمک کنیم روند آزمایش خود را تا حد امکان روان کنید.

و اگر به محصولات دیگر علاقه مند هستید، این لینک ها را بررسی کنید:

مراجع

  • مستندات آنزیمی
  • React Testing Library Documentation
  • React مستندات رسمی
ارسال درخواست