React Native / ملكية العمل غير المتزامن والبيانات / الدرس 12
أدلة اختبارات النموذج والمكوّن والهدف
اختر فحوصا محددة لموضع الشك الفعلي، ولا تحول نجاح JavaScript إلى ادعاء عن التشغيل الأصلي.
في هذه الصفحة
أهداف الدرس
- اختبر الحد الذي قد يفشل عنده السلوك
- استخدم تأكيدات تميز الأخطاء المحتملة
- احسم السباقات صراحة بدلا من النوم
اختبر الحد الذي قد يفشل عنده السلوك
يثبت اختبار دالة نقية تطبيع المدخل أو انتقالا دون تعديل الأصل. ويختبر المكوّن المجهز أوصاف React والتفاعلات العامة. ويعبر اختبار الهدف الشامل العرض الأصلي وتكامل النظام وبيئة التطبيق المختارة. تختلف الأدلة والكلف. ابدأ بأصغر اختبار موثوق يكشف العيب، ثم أضف الأوسع للعقود العابرة فعلا. لا تثبت الصورة حداثة الطلب، ولا نجاح المفكك نطق الخطأ بسياق مفيد. اذكر التنفيذ والبيئة المستعملين فعليا.
استخدم تأكيدات تميز الأخطاء المحتملة
يفحص البرنامج المستقل الأول دالة الاختيار مقابل لقطات وعضوية متوقعة صريحة. يكشف تجميد المدخل تعديلا مباشرا عرضيا، وتفحص مقارنة المصفوفتين عقد الملكية. لا تنسخ التنفيذ لدالة ثانية وتعتبر الاتفاق برهانا. اختر حدود إزالة موجود وإضافة غائب. ترمي مكتبة تأكيد Node عند الفشل؛ فلا يصل سطر النجاح إلا بعد الفحوص كلها. هذا اختبار نموذج محلي لا يعرض مكوّن React.
const assert = require('node:assert/strict');
function toggle(selected, id) {
return selected.includes(id) ? selected.filter(value => value !== id) : [...selected, id];
}
const before = Object.freeze(['w-7']);
const added = toggle(before, 'w-9');
assert.deepEqual(before, ['w-7']);
assert.deepEqual(added, ['w-7', 'w-9']);
assert.notEqual(added, before);
assert.deepEqual(toggle(added, 'w-7'), ['w-9']);
console.log('selection assertions passed');
selection assertions passed
يفحص المصدر المحفوظ ومرجعا جديدا وانتقالي العضوية. ولا يثبت إعادة عرض أصلية.
احسم السباقات صراحة بدلا من النوم
يستخدم البرنامج الثاني وعودا مؤجلة لاختيار الاكتمال. يبدأ A ثم B ويحسم B أولا ويفحص عجز A عن استبدالها لاحقا. لا يلزم تأخير أو خدمة. يحسم البديل كل استمرار يملكه ويمرر الفشل كي لا يخفي اختبار معلق المشكلة. وسّع النمط برفض قديم وإبطال جلسة إذا دخلا السياسة. يستخدم المثال جدولة Node فقط ولا يدعي اختبار تنظيف React أو إلغاء نقل أصلي.
const assert = require('node:assert/strict');
function deferred() {
let resolve;
const promise = new Promise(done => { resolve = done; });
return {promise, resolve};
}
async function testOrder() {
let generation = 0;
let visible = null;
function load(promise) {
const ticket = ++generation;
return promise.then(value => { if (ticket === generation) visible = value; });
}
const a = deferred(), b = deferred();
const waitingA = load(a.promise), waitingB = load(b.promise);
b.resolve('Rivers'); await waitingB;
a.resolve('Maps'); await waitingA;
assert.equal(visible, 'Rivers');
console.log('completion-order assertion passed');
}
testOrder().catch(error => { console.error(error.message); process.exitCode = 1; });
completion-order assertion passed
يتحكم حسم الوعود بالترتيب، لا افتراضات الزمن الفعلي. ويبقى العمل كله في الذاكرة.
تحتاج اختبارات المكونات عارضا متوافقا ودلالات واضحة
ينبغي لاختبار المكوّن تفعيل تحكم عام ذي تسمية وفحص الواجهة المقبولة، بدلا من استدعاء معالج خاص مباشرة. طابق إصدارات عارض الاختبار وReact وReact Native ومكتبة الاختبار التي يختارها المشروع؛ فقد تتغير واجهات الاختبار واعتماديات النظير. لا يثبت نموذج Node بلا عارض استعلام الأدوار أو تجميع الإتاحة أو التركيز أو شجرة أصلية معتمدة. يفيد ناتج اللقطة لغرض مراجع فقط ولا يستبدل تأكيدات تفاعل مفيدة. ضيّق الوحدات الأصلية المحاكية حتى لا يحول البديل كل فشل منصة إلى نجاح بصمت.
أبلغ عن التحقق بنطاق قابل لإعادة الإنتاج
سجّل إصدار بيئة التشغيل وملف قفل الحزم ونمط البناء والهدف والعينات والفحوص المنفذة عند الإبلاغ عن نتائج مهمة. وللمقارنات المرئية اضبط أيضا اللغة وحجم النص والخطوط وإعداد الجهاز قبل قبول مرجع متغير. تحتاج نوافذ الأذونات الأصلية وسلوك لوحة المفاتيح والروابط والحفظ وانتظام الإطارات إلى دليل هدف. تنفذ الدورة نماذج JavaScript مستقلة فقط تحت Node المتاح. وتبقى React وReact Native وتحليل JSX واختبارات العارض وتشغيل Hermes وبناء الجهاز والتكامل الأصلي غير منفذة. تدعم التأكيدات المحدودة السياسة المختبرة، ولا تثبت كل المدخلات أو تعتمد إصدار تطبيق.
الأخطاء الشائعة وإصلاحها
نجاح اختبار غير متزامن بحظ التوقيت
- لماذا يحدث؟
- حل النوم الاعتباطي محل الاكتمال المضبوط.
- كيف تصلحه؟
- استخدم ردودا مؤجلة ونقاط انتظار صريحة.
- كيف تتجنب تكراره؟
- اختبر الترتيب الخطير مباشرة.
الإبلاغ عن تأكيد Node كاختبار مكوّن
- لماذا يحدث؟
- لم يُختبر عارض أو تفاعل مكوّن فعلي.
- كيف تصلحه؟
- سم دليل النموذج وأبق فحوص المكوّن منفصلة.
- كيف تتجنب تكراره؟
- سم البيئة والتنفيذ في التقرير.
قبول صورة متغيرة دون مراجعة
- لماذا يحدث؟
- تُجاهل تغير الإعداد أو تراجع فعلي.
- كيف تصلحه؟
- افحص الفرق بمدخلات عرض مضبوطة.
- كيف تتجنب تكراره؟
- وثّق سبب تغير المرجع البصري.
اختبر فهمك
1. ماذا يثبت اختبار الوعود المؤجلة عن إلغاء الطلب؟
اعرض الحل المشروح
يثبت فقط أن بوابة النشر المنمذجة ترفض النتيجة الأقدم وفقا لترتيب الاكتمال المختار. يكتمل الوعدان رغم ذلك. يحتاج إلغاء النقل وتحرير الموارد وتنظيف التأثير ونتائج الخادم إلى عقود وأدلة مستقلة.
2. لماذا لا يكفي استدعاء معالج زر خاص مباشرة لادعاء اختبار تفاعل؟
اعرض الحل المشروح
يتجاوز ذلك قدرة المستخدم على العثور على التحكم وتفعيله، وصحة عرض الحالة الناتجة. أبق الفحص على مستوى النموذج، ثم استخدم عارضا متوافقا أو هدفا لممارسة الدلالات العامة والتفعيل والنتائج المقبولة.
أهم ما تعلمته
- اختبر الحد الذي قد يفشل عنده السلوك
- أبلغ عن التحقق بنطاق قابل لإعادة الإنتاج