React / سلوك تطبيق منسق / الدرس 12
اختبار التفاعلات وإتاحتها
تحقق من العقود الملحوظة ونسق التحديثات واختبر رحلة المفاتيح والتعافي.
في هذه الصفحة
أهداف الدرس
- تأكيد السلوك المعتمد
- اختبار عقد تفاعلي صغير
- الإتاحة سلوك مختبر
تأكيد السلوك المعتمد
يربط الاختبار المدخل والتفاعل بنتيجة مبررة. أكد الاسم والقيمة والرسالة والحالة لا عدد Hooks أو الغلاف. اشتق المتوقع من المتطلب لا نسخ الصيغة. لا تثبت اللقطة النقر والكتابة والتركيز والتعافي. ابدأ بأصغر عقد ثم الفراغ والرفض والتكرار واضبط الشبكة والوقت.
تنسيق العمل قبل التأكيد
قد تجدول React التحديث فنسق قبل القراءة. تجمع act التفاعلات وتفرغ العمل المرتبط وفق توثيقها، وتغلفها مكتبات اختبار أو ينتظر المتصفح شرطا مرئيا. لا تنثر نوما حتى ينجح المتذبذب. تحتاج المؤقتات والوعود تنسيقا، وقد يتطلب المضيف إعداد act موثقا للاختبار لا متغيرا إنتاجيا عشوائيا.
اختبار عقد تفاعلي صغير
يعرض المثال زر فعل واضح ومخرجا للعدد. يجد الاختبار Add one وينشطه ويؤكد واحدا والتكرار والحد الموثق إن وجد، ولا يخترع هنا حدا. يوفر الزر المفاتيح لكن يلزم التركيز والترتيب. يكشف البحث بالاسم تسمية مفقودة قد تفوت محدد CSS.
import { useState } from "react";
export default function App() { const [count, setCount] = useState(0); return <main><h1>Test target</h1><button type="button" onClick={() => setCount(c => c + 1)}>Add one</button><output aria-label="Count">{count}</output></main>; }
Initial Count: 0. After Add one: 1.
يجد الاختبار الزر باسمه ويؤكد مخرج Count بعد الالتزام.
تحقق منسق مصغر صريح
تصدر الوحدة verify لشرح act دون مشغل خارجي: تركب عدادا معزولا وتنقر داخل act وتقرأ الملتزم وتفك دائما. يوفر المضيف حاوية فارغة منفصلة وإعداد الاختبار. هو تعليم لا بديل لكل أدوات المستخدم؛ تحتاج المفاتيح والكتابة متصفحا أو نمذجة صحيحة. لا تركب جذرا اختباريا في حاوية التطبيق.
import { act, useState } from "react";
import { createRoot } from "react-dom/client";
function Counter() { const [n, setN] = useState(0); return <><button type="button" onClick={() => setN(x => x + 1)}>Add</button><output>{n}</output></>; }
export async function verify(container) { const root = createRoot(container); try { await act(async () => root.render(<Counter />)); await act(async () => container.querySelector("button").click()); const result = container.querySelector("output").textContent; if (result !== "1") throw new Error("Expected one"); return result; } finally { await act(async () => root.unmount()); } }
export default function App() { return <main><h1>Coordinated test target</h1><Counter /></main>; }
Calling verify with an isolated empty test container returns "1".
تحتاج الدالة حاوية اختبار منفصلة وبيئة act وتعيد واحدا بعد التأكيد وتحرر الجذر.
الإتاحة سلوك مختبر
افحص التسميات والوصف والتنشيط والدخول والخروج والتركيز والخطأ. يحتاج الإفصاح حالة ومحتوى والحوار عقدا كاملا. تكشف الأدوات بعض العيوب ولا تثبت الفهم وكل نمط. ضمن التقنيات والمتصفحات المدعومة في الدليل. تعرض React HTML دلالية ولا تمنح المخصص الإتاحة تلقائيا؛ فاحتفظ بالمراجعة المناسبة لما لا تثبته الوحدة.
الأخطاء الشائعة وإصلاحها
يقرأ الاختبار DOM القديمة
- لماذا يحدث؟
- أكد قبل الالتزام.
- كيف تصلحه؟
- نسق أو انتظر النتيجة المرئية.
- كيف تتجنب تكراره؟
- تجنب النوم الاعتباطي.
تنجح اللقطة وتفشل المفاتيح
- لماذا يحدث؟
- فُحص الترميز الأولي فقط.
- كيف تصلحه؟
- اختبر التنشيط والتركيز والتعافي.
- كيف تتجنب تكراره؟
- طابق العقد.
تتسرب الحالة بين الاختبارات
- لماذا يحدث؟
- لم تنظف الجذور والاشتراكات.
- كيف تصلحه؟
- نظف بكل مسار.
- كيف تتجنب تكراره؟
- اختبر منفردا ومجتمعا.
اختبر فهمك
1. اختر تأكيدات لإرسال قد يفشل التحقق.
اعرض الحل المشروح
أكد التسمية والرسالة والتصحيح وحفظ الآمن والاكتمال الصادق، وافحص التركيز والعلاقة. لا يثبت عد المعالج هذه النتائج.
2. لماذا ينظف الاختبار بعد فشل التأكيد أيضا؟
اعرض الحل المشروح
لا يحرر الفشل جذورا ومؤقتات ومستمعين تلقائيا. استخدم تنظيف المشغل أو finally للاستقلال، وإلا أنتج عيبا واحدا إخفاقات مضللة بالتسرب.
أهم ما تعلمته
- اختبر الوعود والتفاعل الفعلي.
- نسق العمل قبل التأكيد.
- تحتاج الإتاحة أكثر من الترميز الساكن.