محتويات الدورة

JavaScript / متوسط: الوحدات والعقود غير المتزامنة / الدرس 10

عقود الأخطاء والاختبارات ذات المعنى

صمّم التحقق وتمرير الأخطاء جزءاً من API. ابنِ اختبارات حتمية صغيرة تفحص المتوقع المستقل والرفض والحالة لا الأسطر المنفذة فقط.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمييز رفض المجال من عيوب البرمجة.
  • حفظ الأسباب وتجنب ابتلاع الأخطاء.
  • كتابة مراجع حكم مستقلة للنجاح والفشل.

تحتاج البيانات غير الصالحة نتيجة معرفة

قد يعيد المحلل نتيجة منظمة لخطأ مستخدم متوقع ويرمي للحالة الداخلية المستحيلة. يتبع الفرق العقد لا قاعدة عامة بوجوب الاستثناء أو الإرجاع دائماً. استخدم كائنات Error لتوفير النوع والرسالة والمكدس والسبب الاختياري. لا تكشف التفاصيل الخام للمستخدم. احفظ السبب عند إضافة السياق وحدّد طبقة لرسالة المستخدم حتى لا تسجل كل طبقة الإخفاق كحادثة مستقلة.

اختبار القيم عند الحد الفعلي

يجب أن يحدد محلل كمية يقبل أرقاماً عشرية بعد إزالة المسافات الفراغ والصياغة قبل التحويل. يقبل Number تمثيلات خارج عقد النموذج، منها تحول الفراغ لصفر. يقبل المثال أرقاماً عشرية صحيحة من واحد إلى عشرين ويعيد رفضاً مميزاً خلاف ذلك. ليس محللاً دولياً عاماً؛ فتحتاج الأرقام المحلية والإشارات والتنسيق سياسة منفصلة. يكشف اختبار الحد الافتراضات قبل حاسب لا يستقبل إلا أعداداً صالحة.

javascript عقد محلل ضيق وصريح
function parseQuantity(text) {
  if (typeof text !== "string" || !/^\d+$/.test(text.trim())) {
    return { ok: false, error: "quantity format" };
  }
  const value = Number(text.trim());
  return Number.isSafeInteger(value) && value >= 1 && value <= 20
    ? { ok: true, value } : { ok: false, error: "quantity range" };
}
console.log(JSON.stringify(parseQuantity(" 3 ")));
console.log(JSON.stringify(parseQuantity("3x")));
الناتج المتوقع
{"ok":true,"value":3}
{"ok":false,"error":"quantity format"}

يمنع فحص الصيغة القبول الجزئي. ويفصل فحص المجال والصحة الآمنة عن الصياغة.

يحتاج التحقق توقعاً مستقلاً

للاختبار إعداد وفعل وملاحظة تقارن بمرجع حكم. يحسب استخدام الدالة نفسها للمتوقع والفعلي العيب مرتين بدلاً من كشفه. لقاعدة استرداد اكتب أمثلة حدود مراجعة وافحص المبلغ والحالة المهمة. تخبر التغطية ما نُفذ لا قدرة التحقق على ملاحظة الخطأ. اختبر غياب المطابقة والمدخل والنوع والحدود. تتحدى نسخة محلية خاطئة ضعف التحقق، لكن لا تسلمها مع التطبيق.

قد يكشف تجهيز صغير الإشارة المقصودة

يكفي مساعد التحقق المكتفي بذاته لتوضيح المرجع دون حزمة. يقارن نتيجة معروفة ويفحص نوع الخطأ المقصود للمدخل الخاطئ. يضيف إطار المشروع العزل والاكتشاف والتقرير والعمر غير المتزامن لكنه لا يختار المرجع. لا تمسك كل استثناء وتعلن النجاح؛ فقد يبدو ReferenceError غير مرتبط تحققاً صحيحاً. انتظر تحقق الرفض أو أعده للمشغل حتى لا ينتهي الاختبار قبل رصد الإخفاق.

javascript فحص قيمة مستقل ونوع خطأ
function assertEqual(actual, expected) {
  if (!Object.is(actual, expected)) throw new Error("assertion failed");
}
function double(value) {
  if (!Number.isFinite(value)) throw new TypeError("finite number required");
  return value * 2;
}
assertEqual(double(4), 8);
let rejected = false;
try { double("4"); } catch (error) { rejected = error instanceof TypeError; }
assertEqual(rejected, true);
console.log("2 checks passed");
الناتج المتوقع
2 checks passed

تراجع الثمانية المتوقعة مستقلاً، ولا تقبل الحالة السلبية إلا تصنيف TypeError المقصود.

ضبط الاعتمادات وفحص الآثار

احقن الوقت والعشوائية ومحولات البيانات حين تؤثر في القاعدة لتكرر المدخل والإخفاق. استخدم كائنات جديدة ولا تعتمد على ترتيب التنفيذ. قد يسجل البديل الاستدعاءات أو يعيد خطأ مضبوطاً، لكنه لا يثبت عقد المتصفح أو الخدمة الحقيقي. احتفظ بحالة تكامل صغيرة للحد. أبلغ عند الفشل عن المدخل والمتوقع والفعلي والبيئة المهمة، ولا تستبدل تحققاً مفيداً بلقطة واسعة لمجرد تمرير تنفيذ متغير.

الأخطاء الشائعة وإصلاحها

إخفاء عيب برمجي كنتائج فارغة

لماذا يحدث؟
معاملة كل إخفاق كغياب قابل للاستعادة.
كيف تصلحه؟
معالجة المتوقع تحديداً وتمرير غير المتوقع.
كيف تتجنب تكراره؟
تعريف فئات الخطأ عند كل حد.

نجاح الاختبار قبل انتهاء العمل

لماذا يحدث؟
عدم انتظار وعده أو إرجاعه.
كيف تصلحه؟
ربط الاكتمال والرفض بعمر الاختبار.
كيف تتجنب تكراره؟
التحقق من كشف اعتماد رافض مضبوط.

اشتراك المتوقع والفعلي في العيب

لماذا يحدث؟
استخدام حساب الإنتاج مرجعاً للحكم.
كيف تصلحه؟
استخدام ثوابت مراجعة أو اشتقاق مستقل.
كيف تتجنب تكراره؟
السؤال عن التنفيذ الخاطئ الذي يرفضه كل تحقق.

اختبر فهمك

1. صمّم حالات محلل كمية من واحد إلى عشرين.

اعرض الحل المشروح

اقبل "1" و"20" و" 3 "، وارفض "0" و"21" و"3x" و"" وnull. افحص فئة الصيغة أو المجال لا أي فشل. تغطي الحالات النوع والصياغة والحدود مع صلاحية الشروط الأخرى.

2. يفحص اختبار حفظ async الاستدعاء فقط. حسّنه.

اعرض الحل المشروح

انتظر الاكتمال وافحص المعرف والقيمة المحفوظة ببديل مملوك أو قراءة تكامل، وتحقق من غياب التأكيد عند رفض مضبوط. لا يميز عدد الاستدعاءات القيمة الخاطئة أو الوعد المنفصل أو التأكيد الزائف.

أهم ما تعلمته

  • الأخطاء جزء من عقد API وتحتاج مالكين.
  • يرفض الاختبار المفيد سلوكاً ضاراً محدداً.

المراجع الرسمية