اختبار مكون رد فعل فعال أمر بالغ الأهمية. React Testing Library (RTL) تبسيط هذه العملية ، مع التأكيد على اختبار تفاعل المستخدم. تقدم هذه المقالة خمسة تقنيات RTL المتقدمة لكتابة اختبارات الوحدة الأكثر كفاءة وقابلة للصيانة.
الشاشة
للاستعلامات تجنب التدمير استفسارات مباشرة من render ()
. باستخدام كائن
محسّن اختبار القراءة.
بدلاً من:
const {getBytext} = render () ؛ توقع (getByText (/انقر فوق ME/I)).
const { getByText } = render();
expect(getByText(/click me/i)).toBeInTheDocument();
يجعل()؛
توقع (screen.getByText (/انقر فوق ME/I)).
يحافظ هذا النهج على الاتساق عبر أجنحة الاختبار الأكبر.
render();
expect(screen.getByText(/click me/i)).toBeInTheDocument();
findby للعمليات غير المتزامنة
getby
. هذا يضمن أن التأكيدات تعمل فقط بعد عرض العناصر.
فوائد:
يلغي الاختبارات القاسية بسبب مشكلات التوقيت.
يخلق اختبارات أكثر قوة للمكونات غير المتزامنة.
بدلاً من ذلك ، يمكن أن يحقق نتائج مماثلة ، لكن
تجنب استخدامها معًا.// Component asynchronously fetches and displays a username
render( );
const userName = await screen.findByText(/john doe/i);
expect(userName).toBeInTheDocument();
3.
داخل للحصول على استهداف دقيق
عند استهداف العناصر داخل حاويات محددة ، فإن الأداة المساعدة
render( );
await waitFor(() => {
expect(screen.getByText(/john doe/i)).toBeInTheDocument();
});
فوائد: يمنع اختيار العنصر غير المقصود.
يحسن دقة الاختبار.
مثال:
يجعل(
) ؛ const namelabel = داخل (screen.getByRole ('Group')). getBylabelText (/name/i) ؛ توقع (namelabel) .TobeIntheDocument () ؛userevent للتفاعلات الواقعية
render(
);
const nameLabel = within(screen.getByRole('group')).getByLabelText(/Name/i);
expect(nameLabel).toBeInTheDocument();
userevent يوفر محاكاة تفاعل مستخدم أكثر واقعية ، بما في ذلك الكتابة والنقر والعلامات.
محاكاة حدث أكثر دقة.
مثال:
استيراد userevent من '@testing-library/user-event' ؛
عرض (
طريقة debug ()
لا تقدر بثمن لفشل اختبار استكشاف الأخطاء وإصلاحها عن طريق طباعة بنية DOM إلى وحدة التحكم.import userEvent from '@testing-library/user-event';
render( );
const emailInput = screen.getByLabelText(/email/i);
const passwordInput = screen.getByLabelText(/password/i);
const submitButton = screen.getByRole('button', { name: /submit/i });
await userEvent.type(emailInput, '[email protected]');
await userEvent.type(passwordInput, 'password123');
await userEvent.click(submitButton);
expect(screen.getByText(/welcome/i)).toBeInTheDocument();
استهداف عناصر محددة ممكن أيضًا:
نصائح إضافية:
render( );
screen.debug(); // Logs the DOM structure
الجمع بين المطابقات:
const section = screen.getByRole('region');
within(section).debug();
.
تنظيف: بينما يقوم RTL بمضللة التنظيف ، يتصل بشكل صريح
RTL يعطي الأولوية للاختبار المتمحور حول المستخدم. من خلال تطبيق هذه التقنيات ، ستقوم بإنشاء اختبارات أنظف وأكثر موثوقية وقابلة للصيانة ، مما يؤدي إلى تحسين سير عمل التطوير الكلي. احتضن هذه الاستراتيجيات لتعزيز ممارسات اختبار الرد.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3