مرحبًا يا من هناك! باعتباري موردًا للإنزيمات، رأيت الكثير من الأشخاص في حيرة من أمرهم عندما يتعلق الأمر باختبار البوابات في مكونات React باستخدام الإنزيم. تعد البوابات ميزة رائعة جدًا في React تتيح لك عرض العناصر الفرعية في عقدة DOM الموجودة خارج تسلسل DOM للمكون الأصلي. لكن اختبارها يمكن أن يكون أمرًا مؤلمًا بعض الشيء فيما يتعلق بما تعرفه. في منشور المدونة هذا، سأشارك بعض النصائح والحيل حول كيفية اختبار البوابات في مكونات React باستخدام الإنزيم.
ما هي البوابات في رد الفعل؟
قبل أن نتعمق في الاختبار، دعونا نتعرف سريعًا على ماهية البوابات. في React، توفر البوابات طريقة من الدرجة الأولى لعرض الأطفال في عقدة DOM الموجودة خارج تسلسل DOM للمكون الأصلي. فيما يلي مثال بسيط لاستخدام بوابة في React:
استيراد رد فعل من "رد فعل"؛ استيراد ReactDOM من "react-dom"؛ const PortalExample = ({ children }) => { return ReactDOM.createPortal( children, document.getElementById('portal-root') ); }; تصدير PortalExample الافتراضي؛
في هذا المثال،PortalExampleيأخذ المكون بعض الأطفال ويعرضهم في عقدة DOM بالمعرفجذر البوابة، والذي يمكن أن يكون في أي مكان في مستند HTML، حتى خارج شجرة DOM الخاصة بالمكون الأصلي.
لماذا يعد اختبار البوابات أمرًا صعبًا؟
يمكن أن يكون اختبار البوابات أمرًا صعبًا لأن Enzyme، افتراضيًا، يتفاعل فقط مع شجرة مكونات React ولا يتفاعل مباشرة مع DOM الفعلي حيث تعرض البوابة أطفالها. وهذا يعني أنه إذا حاولت اختبار مكون يستخدم بوابة باستخدام طرق Enzyme العادية، فقد لا تتمكن من الوصول إلى المحتوى المعروض للبوابة.
إعداد بيئة الاختبار
أول الأشياء أولاً، تحتاج إلى إعداد بيئة الاختبار الخاصة بك. تأكد من تثبيت Enzyme ومحول React الخاص به في مشروعك. إذا كنت تستخدم React 16 أو إصدارًا أحدث، فستحتاج إلىإنزيم-محول-رد فعل-16أو إصدار أحدث اعتمادًا على إصدار React الخاص بك.
تثبيت npm --حفظ-محول إنزيم الإنزيم-رد فعل-16
بعد ذلك، في ملف إعداد الاختبار، قم بتكوين Enzyme لاستخدام المحول:
استيراد الإنزيم من "الإنزيم"؛ محول الاستيراد من 'إنزيم-محول-رد فعل-16'؛ Enzyme.configure({ المحول: محول جديد () });
اختبار البوابات مع الانزيم
الآن دعونا ندخل في الاختبار الفعلي. هناك عدة طرق مختلفة يمكنك اتباعها لاختبار البوابات في مكونات React باستخدام Enzyme.
1. الاستهزاء بالبوابة
تتمثل إحدى طرق اختبار المكون الذي يستخدم البوابة الإلكترونية في محاكاة وظيفة البوابة الإلكترونية. بدلًا من عرض العناصر الفرعية فعليًا في عقدة DOM منفصلة، يمكنك عرضها مباشرةً باستخدام طريقة العرض العادية للمكون أثناء الاختبار.


فيما يلي مثال لكيفية القيام بذلك:
استيراد رد فعل من "رد فعل"؛ استيراد {جبل} من "الإنزيم"؛ const PortalExample = ({ children, usePortal = true }) => { if (usePortal) { return ReactDOM.createPortal( children, document.getElementById('portal-root') ); } العودة <div>{الأطفال</div>; }; وصف('PortalExample', () => { it('يجب عرض الأطفال عند عدم استخدام البوابة الإلكترونية', () => { const Wrapper = mount(<PortalExample usePortal={false}>اختبار المحتوى</PortalExample>); توقع(wrapper.text()).toBe('محتوى اختباري'); }); });
في هذا المثال أضفنا أusePortalدعم لPortalExampleعنصر. متىusePortalيكونخطأ شنيع، يعرض المكون الأطفال مباشرة في ملف<ديف>بدلاً من استخدام البوابة. بهذه الطريقة، يمكننا بسهولة اختبار وظائف المكون باستخدام طرق الإنزيم العادية.
2. اختبار عقدة DOM الخاصة بالبوابة
هناك طريقة أخرى تتمثل في اختبار عقدة DOM الفعلية حيث تعرض البوابة أطفالها. للقيام بذلك، تحتاج إلى الوصول إلى عقدة DOM والتحقق من محتواها.
استيراد رد فعل من "رد فعل"؛ استيراد {جبل} من "الإنزيم"؛ const PortalExample = ({ children }) => { return ReactDOM.createPortal( children, document.getElementById('portal-root') ); }; وصف('PortalExample', () => { it('should عرض الأطفال في جذر البوابة الإلكترونية', () => { const PortalRoot = document.createElement('div');portalRoot.id = 'portal-root'; document.body.appendChild(portalRoot); const Wrapper = mount(<PortalExample>Test Content</PortalExample>); توقع (portalRoot.textContent).toBe('محتوى الاختبار'); document.body.removeChild(portalRoot); }); });
في هذا المثال، قمنا بإنشاء عقدة DOM جديدة بالمعرفجذر البوابةفي الاختبار، قم بتركيب المكون باستخدام الإنزيم، ثم تحقق من محتوى الملفimport org.portalRootالعقدة. بعد الانتهاء من الاختبار نقوم بإزالةimport org.portalRootالعقدة من DOM للتنظيف.
استخدام مكتبات الطرف الثالث
هناك أيضًا بعض مكتبات الجهات الخارجية التي يمكنها تسهيل اختبار بوابات الإنزيم. على سبيل المثال،@testing-library/reactتحتوي المكتبة على دعم مدمج لبوابات الاختبار. يمكنك استخدامه مع الإنزيم لاختبار مكونات React بشكل أكثر فعالية.
تثبيت npm --save-dev @testing-library/react
فيما يلي مثال لكيفية استخدامك@testing-library/reactلاختبار مكون يستخدم بوابة:
استيراد رد فعل من "رد فعل"؛ استيراد {جبل} من "الإنزيم"؛ استيراد {تجسيد، شاشة} من '@testing-library/react'؛ const PortalExample = ({ children }) => { return ReactDOM.createPortal( children, document.getElementById('portal-root') ); }; وصف('PortalExample', () => { it('should عرض الأطفال في جذر البوابة الإلكترونية', () => { const PortalRoot = document.createElement('div');portalRoot.id = 'portal-root'; document.body.appendChild(portalRoot); render(<PortalExample>اختبار المحتوى</PortalExample>); توقع(screen.getByText('Test المحتوى')).toBeInTheDocument(); document.body.removeChild(portalRoot); }); });
في هذا المثال نستخدم@testing-library/react'sيجعلوظيفة لتقديم المكون وScreen.getByTextللتحقق من عرض المحتوى في جذر البوابة الإلكترونية.
خاتمة
قد يكون اختبار البوابات في مكونات React باستخدام الإنزيم أمرًا صعبًا، ولكن باستخدام النهج الصحيح، يصبح الأمر ممكنًا بالتأكيد. سواء اخترت محاكاة البوابة الإلكترونية، أو اختبار عقدة DOM الخاصة بالبوابة الإلكترونية، أو استخدام مكتبات الجهات الخارجية، فإن المفتاح هو العثور على طريقة للوصول إلى المحتوى الذي تقدمه البوابة الإلكترونية والتحقق منه.
إذا كنت مهتمًا بمنتجات Enzyme الخاصة بنا أو كانت لديك أي أسئلة حول اختبار مكونات React، فلا تتردد في التواصل معنا لإجراء مناقشة حول الشراء. نحن هنا لمساعدتك على تحقيق أقصى استفادة من الإنزيم في مشاريعك.
وبالمناسبة، إذا كنت مهتمًا أيضًا بالمستخلصات العشبية، فراجع هذه الروابط:الحضض الصيني الأسود,قهوة سي بي دي، وزيت التربنتين عالي الجودة/زيت التربنتين سعر المصنع/زيت التربنتين المعدني.
مراجع
- React الوثائق الرسمية على البوابات: React Team.
- الوثائق الرسمية للإنزيم: Airbnb.
- @testing-library/react الوثائق الرسمية: فريق مكتبة الاختبار.