يعد اختبار ترقيم الصفحات في مكونات React جزءًا مهمًا لضمان الأداء الوظيفي وتجربة المستخدم لتطبيقات الويب الخاصة بك. باعتباري أحد موردي الإنزيمات، رأيت بنفسي مدى أهمية وجود عملية اختبار موثوقة لميزات ترقيم الصفحات. في منشور المدونة هذا، سأشارك بعض النصائح والحيل حول كيفية اختبار ترقيم الصفحات في مكونات React باستخدام Enzyme.
فهم ترقيم الصفحات في رد الفعل
قبل أن نتعمق في الاختبار، دعونا نتعرف سريعًا على ماهية ترقيم الصفحات وكيفية تنفيذها في React. ترقيم الصفحات هو أسلوب يستخدم لتقسيم مجموعات البيانات الكبيرة إلى صفحات أصغر وأكثر قابلية للإدارة. في تطبيق React، غالبًا ما يتم تنفيذ ترقيم الصفحات باستخدام الحالة لتتبع الصفحة الحالية وعدد العناصر في كل صفحة.
فيما يلي مثال بسيط لمكون React مع ترقيم الصفحات:
استيراد React، { useState } من "react"؛ const PaginationComponent = ({ items }) => { const [currentPage, setCurrentPage] = useState(1); const itemsPerPage = 10; const IndexOfLastItem = currentPage * itemsPerPage; const IndexOfFirstItem = IndexOfLastItem - itemsPerPage; const currentItems = items.slice(indexOfFirstItem, IndexOfLastItem); const paginate = (pageNumber) => setCurrentPage(pageNumber); return ( <div> {currentItems.map((item) => ( <div key={item.id}>{item.name}</div> ))} {/* أزرار ترقيم الصفحات */ <button onClick={() => paginate(currentPage - 1)} Disabled={currentPage === 1}> السابق </button> <button onClick={() => paginate(currentPage + 1)}disable={indexOfLastItem >= items.length}> التالي </button> </div> ); }; تصدير PaginationComponent الافتراضي؛
إعداد الإنزيم للاختبار
Enzyme عبارة عن أداة مساعدة لاختبار JavaScript لـ React تسهل تأكيد مخرجات مكونات React ومعالجتها واجتيازها. لبدء استخدام Enzyme، ستحتاج إلى تثبيته مع المحول الخاص به لإصدار React الخاص بك.
تثبيت npm --حفظ-محول إنزيم الإنزيم-رد فعل-16
إليك كيفية إعداد الإنزيم في ملف الاختبار الخاص بك:
استيراد الإنزيم، {السطحي} من "الإنزيم"؛ محول الاستيراد من 'إنزيم-محول-رد فعل-16'؛ Enzyme.configure({ المحول: محول جديد () });
اختبار وظيفة ترقيم الصفحات
الآن بعد أن قمنا بإعداد المكون والإنزيم، فلنبدأ باختبار وظيفة ترقيم الصفحات.
اختبار العرض الأولي
أول شيء نريد اختباره هو العرض الأولي للمكون. سوف نتحقق مما إذا كان العدد الصحيح للعناصر معروضًا في الصفحة الأولى.
استيراد رد فعل من "رد فعل"؛ استيراد PaginationComponent من './PaginationComponent'؛ استيراد الإنزيم، {السطحي} من "الإنزيم"؛ محول الاستيراد من 'إنزيم-محول-رد فعل-16'؛ Enzyme.configure({ المحول: محول جديد () }); وصف('PaginationComponent', () => { const items = Array.from({ length: 20 }, (_, i) => ({ id: i, name: `Item ${i}` })); it('يجب عرض العدد الصحيح من العناصر في الصفحة الأولى', () => { const Wrapper = surface(<PaginationComponent items={items} />); توقع(wrapper.find('div').length).toBe(10 + 2); // 10 عناصر + 2 زر });
اختبار أزرار ترقيم الصفحات
بعد ذلك، سنقوم باختبار أزرار ترقيم الصفحات للتأكد من أنها تعمل كما هو متوقع. سننقر على زر "التالي" ونتحقق من عرض المجموعة التالية من العناصر.
it('يجب أن يعرض المجموعة التالية من العناصر عند النقر على الزر التالي', () => { const Wrapper = surface(<PaginationComponent items={items} />); const nextButton = Wrapper.find('button').at(1); nextButton.simulate('click'); // تحقق مما إذا كانت الحالة قد تم تحديثها توقع(wrapper.state('currentPage')).toBe(2); // تحقق مما إذا كان العدد الصحيح للعناصر يتم عرض توقع(wrapper.find('div').length).toBe(10 + 2 });
يمكننا أيضًا اختبار الزر "السابق" بطريقة مماثلة:


it('يجب أن يعرض المجموعة السابقة من العناصر عند النقر فوق الزر السابق', () => { const Wrapper = surface(<PaginationComponent items={items} />); const nextButton = Wrapper.find('button').at(1); nextButton.simulate('click'); const prevButton = Wrapper.find('button').at(0); prevButton.simulate('click'); توقع(wrapper.state('currentPage')).toBe(1); توقع(wrapper.find('div').length).toBe(10 + 2);
اختبار الأزرار المعطلة
يجب علينا أيضًا اختبار ما إذا كانت أزرار ترقيم الصفحات معطلة عندما ينبغي أن تكون كذلك. على سبيل المثال، يجب تعطيل الزر "السابق" في الصفحة الأولى، ويجب تعطيل الزر "التالي" في الصفحة الأخيرة.
it('should تعطيل الزر السابق في الصفحة الأولى', () => { const المجمع = الضحل(<PaginationComponent items={items} />); const prevButton = Wrapper.find('button').at(0); توقع(prevButton.prop('disabled')).toBe(true); }); it('should تعطيل الزر التالي في الصفحة الأخيرة', () => { const Wrapper = surface(<PaginationComponent items={items} />); // انتقل إلى الصفحة الأخيرة while (wrapper.find('button').at(1).prop('disabled') === false) { Wrapper.find('button').at(1).simulate('click'); } const nextButton = Wrapper.find('button').at(1); توقع(nextButton.prop('disabled')).toBe(true });
سيناريوهات الاختبار المتقدمة
اختبار حالات الحافة
بالإضافة إلى الوظائف الأساسية، يجب علينا أيضًا اختبار بعض حالات الحافة. على سبيل المثال، ماذا يحدث إذا لم تكن هناك عناصر أو إذا كان هناك عناصر أقل من العناصر الموجودة في كل صفحة؟
it('يجب أن يتعامل مع قائمة فارغة من العناصر', () => { const Wrapper = surface(<PaginationComponent items={[]} />); توقع(wrapper.find('div').length).toBe(2); // الأزرار فقط }); it('يجب أن يتعامل مع قائمة عناصر أصغر من العناصر الموجودة في كل صفحة', () => { const SmallItems = Array.from({ length: 5 }, (_, i) => ({ id: i, name: `Item ${i}` })); const Wrapper = surface(<PaginationComponent items={smallItems} />); توقع(wrapper.find('div').length).toBe(5 + 2 });
الاختبار باستخدام عناصر مختلفة لكل صفحة
يمكننا أيضًا اختبار المكون بقيم مختلفة لـitemsPerPage. يمكن أن يكون هذا مفيدًا إذا كان تطبيقك يسمح للمستخدم بتغيير عدد العناصر المعروضة في كل صفحة.
it('يجب أن يعرض العدد الصحيح من العناصر ذات قيمة itemsPerPage مختلفة', () => { const CustomPaginationComponent = ({ items }) => { const [currentPage, setCurrentPage] = useState(1); const itemsPerPage = 5; // باقي كود المكون... }; const Wrapper = surface(<CustomPaginationComponent items={items} />); توقع(wrapper.find('div').length).toBe(5 + 2 });
خاتمة
يعد اختبار ترقيم الصفحات في مكونات React باستخدام Enzyme خطوة مهمة في ضمان موثوقية تطبيقك ووظيفته. باتباع النصائح والأمثلة الواردة في منشور المدونة هذا، يمكنك كتابة اختبارات شاملة لميزات ترقيم الصفحات لديك.
إذا كنت تبحث عن منتجات إنزيمات عالية الجودة تلبي احتياجات الاختبار الخاصة بك، فنحن هنا لمساعدتك. نحن نقدم مجموعة واسعة من حلول الانزيم، بما في ذلكزيت الزنجبيل,مصنع توريد مسحوق الأفوكادو المجفف العضوي، وسعر الجملة بروتين مصل اللبن 100% بالجملة. اتصل بنا لمناقشة متطلباتك وبدء مفاوضات الشراء.
مراجع
- توثيق الإنزيم: https://enzymejs.github.io/enzyme/
- وثائق التفاعل: https://reactjs.org/docs/getting-started.html