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

TypeScript / المتوسط / الدرس 12

اختبار الأنواع وسلوك التنفيذ

اختبر العقود الساكنة ونتائج JavaScript منفصلين واحفظ تجارب صغيرة قابلة للإعادة لتغييرات الإعداد والمترجم.

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

أهداف الدرس

  • فصل قبول الترجمة والتشخيص المتوقع والتأكيد التنفيذي.
  • بناء اختبارات حدود دون تكرار التنفيذ.
  • فحص المداخل العامة والملفات المولدة كمستهلك.

اختبار النوع ليس اختبار تنفيذ

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

فحص الحدود دون نسخ الصيغة

يفحص البرنامج حساب الدفعات بنتائجه. يقبل حارسه عدًا صحيحًا آمنًا غير سالب وعرضًا موجبًا، ويجنب الخارج والبقية جمعًا قد يفقد الدقة قرب الحد. يعود الإدخال الفاسد بـundefined بدل استثناء عرضي. يرمي البرنامج عند فشل التوقع ويعلن النجاح بعد الكل. يمكن استخدام إطار معتمد فعليًا، ولا تحتاج التجربة حزمة إضافية.

typescript برنامج عقد مكتمل بلا اعتماديات
export {};
function batches(count: number, width: number): number | undefined {
  if (!Number.isSafeInteger(count) || count < 0 || !Number.isSafeInteger(width) || width <= 0) { return undefined; }
  return Math.floor(count / width) + (count % width === 0 ? 0 : 1);
}
function expect(condition: boolean): void { if (!condition) { throw new Error("test failed"); } }
expect(batches(0, 4) === 0);
expect(batches(8, 4) === 2);
expect(batches(9, 4) === 3);
expect(batches(2, 0) === undefined);
console.log("4 cases passed");
الناتج المتوقع
4 cases passed

تغطي الفحوص الفراغ والقسمة التامة والتقريب والرفض، ويمنع فشل أي منها سطر النجاح.

اختبار المرفوض عمدًا كالمقبول

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

typescript مدخلات unknown بنتائج قبول متوقعة
export {};
function positiveInteger(value: unknown): value is number {
  return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
}
const cases: readonly (readonly [unknown, boolean])[] = [[1, true], [0, false], ["1", false]];
for (const [input, wanted] of cases) {
  if (positiveInteger(input) !== wanted) { throw new Error("guard mismatch"); }
}
console.log("3 guards passed");
الناتج المتوقع
3 guards passed

يُقبل العدد الصحيح الموجب فقط، ولا يفترض الاختبار صحة unknown مسبقًا.

تضييق الأخطاء المقصودة وفحصها

حدّد العلاقة المرفوضة والمترجم للتجربة. تبلغ @ts-expect-error عند زوال الخطأ ولا تضمن وحدها أنه المقصود. اجعل السبب واحدًا وافحص الرمز إن دعمت الأداة. تخفي @ts-ignore التشخيص وقد تخفي زوال العيب، ولا تصلح أي منهما للتحقق التنفيذي. يجب أن تترجم الأمثلة المكتملة بلا أخطاء وتوسم المرفوضة دون ناتج مختلق.

اختبار الناتج والإعداد المستخدمين فعلًا

اختبر JavaScript والتصريحات المنشورة من مستهلك منفصل بمدخل ESM أو CommonJS، فقد يتجاوز استيراد المصدر exports ويخفي حزمة مكسورة. تحتاج عيوب الإعداد ملفاته وأوامره نفسها. افحص الإصلاح بتركيز ووسّع عند سبب جديد. اختبر قبول الحارس ورفضه الخاطئين لا نجاح الترجمة فقط. استخدم مدخلات اصطناعية دون خدمات خارجية لإعادة الفشل وعدم مس موارد الإنتاج.

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

اختبارات نوعية تفوت محللًا تنفيذيًا مكسورًا.

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

استثناء يخفي التشخيص الخطأ.

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

حزمة تعمل من المصدر لا بعد النشر.

لماذا يحدث؟
تجاوزت الاختبارات المسارات المولدة أو exports.
كيف تصلحه؟
اختبر الناتج المحزم بمستهلك منفصل.
كيف تتجنب تكراره؟
أدرج تحميل المدخل في فحوص الإصدار.

اختبر فهمك

1. أضف batches(1, 4) وbatches(2.5, 4) ونتيجتيهما والعيبين المختلفين.

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

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

2. يعيد حارس true دائمًا بتوقيع مقنع. صف مجموعة صغيرة تكشف العيب.

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

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

أهم ما تعلمته

  • يحمي اختبارا النوع والتنفيذ وعدين مختلفين.
  • استخدم حالات سلبية وإعدادًا دقيقًا.
  • افحص الناتج من حد المستهلك.

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