NestJS / دليل حلول تحريري
تشخيص فجوات التحقق والحارس والتسلسل
فسر نجاح الاختبار المباشر بينما يقبل المسار مخالفة أو يتجاوز سياسة أو يكشف حقولاً غير متوقعة.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
قد ينجح اختبار وحدة للمتحكم بينما يبقى إدخال HTTP سلسلة، أو يعجز حارس عن رؤية DTO المتوقعة، أو تتضمن الاستجابة حقلاً وسم بالخصوصية. حدد أولاً مراحل الطلب التي نفذت فعلاً. إعلان نوع أو علامة بيانات ليس دليلاً على تسجيل المكون الذي يفرضها.
افهم الأسباب المحتملة
- من الأسباب المحتملة غياب إعداد الإقلاع العام، أو استعمال واجهات حيث يلزم وجود فئات فعلية، أو توقع الحارس خرج pipe قبل موعد تنفيذها، أو بناء مكونات عامة يدوياً دون اعتماداتها، أو معالجة رد أصلي، أو كائنات عادية تتجاوز إعداد التسلسل المقصود. قد يفتقد نقل آخر أيضاً سياسة افترض أنها موجودة لأنه يشترك في التطبيق مع HTTP.
حدد المدخل والإعداد الفعليين
سجل معرف المتحكم وطريقة المعالجة، وموائم HTTP المختار، والبادئة العامة، ودالة الإعداد التي استخدمها سياق التطبيق هذا. يتجاوز استدعاء طريقة مباشرة التوجيه والحراس وعمليات pipe والمعترضات ومرشحات الاستثناء. ولا تعيد وحدة الاختبار بالضرورة سياسات إقلاع الإنتاج. قارن السياق الحقيقي بالتسجيل المقصود لـAPP_GUARD وعمليات pipe العامة ومكونات التسلسل، بما فيه إنشاء هذه المكونات عبر الحاوية عندما تحتاج اعتمادات. لا تضف كل مكون مفقود دفعة واحدة؛ احفظ طلباً اصطناعياً يفشل، وحدد أول حد تختلف عنده القيم المرصودة عن العقد. أبعد أجسام الطلبات الخاصة والرموز السرية عن التتبعات الروتينية.
افحص الفئة والقيمة وترتيب المرحلة وقت التشغيل
لا تحلل تعليقات TypeScript قيم الطلب. عند استعمال ValidationPipe القائمة على الفئة، قدم فئة DTO الفعلية ببيانات تحققها وخياراتها المقصودة. وعند استعمال مخطط، سجل المكون الذي يفرضه بدلاً من الاكتفاء ببياناته. تعمل الحراس قبل عمليات pipe للمعاملات، فلا يحق للحارس افتراض DTO محولة مسبقاً. تحقق من الشرط الخام الذي يحتاجه الحارس، أو انقل قرار الكائن إلى خدمة مشتركة تستقبل إدخالاً متحققاً منه. اختبر الغياب وnull والنوع المخالف والحقول المجهولة والفعل الصحيح البنية غير المفوض كحالات مستقلة. وجود حقل ضمن القائمة المسموحة لا يمنح صلاحية تغيير قيمته.
تحقق من وجود الإدخال دون ادعاء اختبار pipe
تميز دالة التحديث المحلية التالية بين summary المحذوفة وnull الصريحة والسلسلة الفارغة. تعيد سجلاً جديداً ولا تغير الأصل. يثبت هذا الاختبار دلالات المجال المحددة، لكنه لا يتحقق من JSON الواردة ولا يربط أي pipe في Nest. ينبغي لاختبار تركيب حقيقي إثبات حفاظ الموائم على الحالات الثلاث ورفض المخالف قبل أي أثر محمي. لا تصلح فجوة الدورة بإضعاف كل DTO إلى سلاسل عشوائية، أو بتحويل القيم المخالفة إلى كائن فارغ يغير معنى التحديث بصمت. تبقى التهيئة والتحويل وتمرير الإدخال الفعلي حدوداً أخرى تحتاج إلى دليل.
function patch(old,input) {return Object.hasOwn(input,"summary") ? {...old,summary:input.summary} : {...old};}
const old={summary:"Old"};
console.assert(patch(old,{}).summary === "Old");
console.assert(patch(old,{summary:null}).summary === null);
console.assert(patch(old,{summary:""}).summary === "");
console.assert(old.summary === "Old");
تنجح الأربعة لسلوك كائن عادي لا تحويل DTO أو تحققها.
تتبع الأهلية والتسلسل الفعلي
طبق أهلية الوصول إلى الكائن قبل اختيار الحقول العامة. ثم تحقق هل النتيجة مثيل الفئة المتوقع أم DTO عادية مختارة، وهل يصل إليها معترض التسلسل المضبوط فعلاً. قد يغير التعامل الأصلي عبر @Res مسؤولية الإرسال، وقد تؤدي عدة طبقات تغليف إلى غلاف مكرر. أكد المفاتيح المسموحة الدقيقة وغياب القيم السرية بدلاً من حفظ لقطات لكيانات عشوائية كاملة. يشغل هذا الدليل دالة التحديث فقط، ولا يشغل متحكماً أو حارساً أو مسلسِلاً أو موائم HTTP. احتفظ بفحوص الدورة والإخراج الحقيقية لتطبيق معزول مأذون يستخدم الإصدارات المثبتة والهويات الاصطناعية.
تحقق من نجاح الإصلاح
تحقق عبر سياق التطبيق المركب المقصود من إدخال صحيح، ومدخل معيب، ومدخل صحيح البنية غير مفوض، وكائن غائب، وفشل مصدر. أكد عدم استدعاء العملية المحمية عند الرفض، والمفاتيح العامة الدقيقة، وفئات أخطاء آمنة. افصل نتائج الاستدعاء المباشر عن دليل تشغيل دورة الطلب.
امنع تكرار المشكلة
- شارك سياسة إقلاع مقصودة بين الإنتاج والاختبارات، واجعل استيرادات فئات DTO الفعلية واضحة، ووثق اعتماد الحارس على مراحل pipe. احتفظ باختبارات سياسة المداخل الأخرى وعينات اختيار الإخراج. تعامل مع البيانات الوصفية كعقد يجب فرضه، لا كضمان تلقائي.