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

NestJS / المتوسط: السياسات والموائمات والمصادر / الدرس 10

بدائل الاختبار وعقود الطلب المركب

افصل دليل المجال النقي وترجمة الحاوية وتغطية دورة الطلب الحقيقية.

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

أهداف الدرس

  • استبدل رموز المزود ببدائل حتمية دون الاتصال بمصدر مضبوط.
  • أكد الهوية والآثار بجانب الحالة أو غياب الاستثناء.

اختر حد الاختبار قبل أداته

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

استبدل رمز المزود نفسه قبل الترجمة

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

typescript استبدال توضيحي بوحدة اختبار
const moduleRef = await Test.createTestingModule({
  imports:[CatalogModule],
})
  .overrideProvider(COURSE_READER)
  .useValue(fakeReader)
  .compile();
const service = moduleRef.get(CatalogService);

تفترض Test والرموز والفئات والبديل، ولم ينشأ سياق Nest أو مصنع حقيقي هنا.

اشتق السلبيات من حالة الاستخدام

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

أثبت أن العمل الممنوع لا يصل للمصدر

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

javascript اختبار محلي كامل لأسبقية السياسة على المصدر
function read(principal,tenant,reader) {
  if (principal.tenantId !== tenant) return {code:"DENIED"};
  return reader.find(tenant);
}
const calls=[]; const reader={find:tenant => {calls.push(tenant);return {id:"c1"};}};
console.assert(read({tenantId:"lab-b"},"lab-a",reader).code === "DENIED");
console.assert(calls.length === 0);
console.assert(read({tenantId:"lab-a"},"lab-a",reader).id === "c1");
console.assert(JSON.stringify(calls) === '["lab-a"]');

لا يصل المرفوض للبديل ويسجل المؤهل مستأجراً مرة دون حزمة اختبار Nest.

أعد سياسة الإقلاع بقصد لا بالمصادفة

لا يثبت إنشاء تطبيق اختبار أن pipes والمرشحات والبادئة وخيارات الإنتاج طبقت. شارك دالة إعداد مراجعة أو ركب مكافئاً صريحاً. افصل الترجمة والتهيئة والاستماع ولا تفتح منفذاً لفحص بناء. سجل المشغل والحد المنفذ. يشغل المقرر المراقب فقط ولا يترجم Test أو يجرب حارساً أو HTTP أو أداة أو اتصال مصدر. تبقى الفحوص للمشروع المأذون. يحدد التقرير بهذه الطريقة لماذا ينجح اختبار خدمة ويبقى خطأ إدخال يمر من عنوان حقيقي بسبب غياب global pipe عن الإقلاع.

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

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

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

يفوت اختبار المتحكم pipe عامة معطلة

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

تأتي نتيجة المنع بعد أثر محمي

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

اختبر فهمك

1. لماذا يمكن أن تنشأ آثار عند ترجمة وحدة اختبار من دون استدعاء مسار؟

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

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

2. ماذا ينبغي أن يذكر تقرير الاختبار إذا لم تنفذ إلا دالة مراقب الخدمة المحلية؟

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

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

أهم ما تعلمته

  • يثبت الاختبار المفيد الهوية والآثار لا الحالة فقط.
  • يجب أن تدخل البدائل وسياسة الإقلاع في الرسم المختبر.

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