تتجاوز فرق الاختبارات لأسباب مفهومة: ضغط المواعيد، وعدم وضوح ما ينبغي اختباره، والشعور بأنها تبطئ العمل. تظهر الكلفة لاحقًا حين يصبح كل إصدار مقلقًا ولا يجرؤ أحد على إعادة الهيكلة. نقترح في تطبيقات Laravel البدء باختبارات الميزات، وإضافة اختبارات وحدات حين يتعقد المنطق، مع إبقاء المجموعة سريعة لتعمل مع كل تغيير.
لماذا نبدأ باختبارات الميزات؟
يرسل اختبار الميزة طلبًا حقيقيًا عبر التطبيق، بما فيه المسارات والوسائط والتحقق والتفويض وقاعدة البيانات والاستجابة. ويختبر ما يهم المستخدم: عند إرسال النموذج، هل ينشأ السجل ويُخطر الشخص الصحيح وتكون الاستجابة سليمة؟
لهذا ثلاث فوائد على الاقتصار على الوحدات الصغيرة: يكشف أخطاء الربط كمسار بلا مصادقة أو قاعدة تحقق تخالف قاعدة البيانات؛ ويصمد أمام إعادة الهيكلة لأنه يختبر السلوك لا التفاصيل الداخلية؛ ويصبح توثيقًا لما يفترض أن يفعله النظام.
ما الذي تختبره أولًا؟
المسارات التي تكسب المال أو تخسره
ابدأ بالدفع والحجز والفوترة والاشتراكات وأي إجراء يحمل خلله كلفة مباشرة. غط المسار الناجح والإخفاقات المهمة: مدخل غير صحيح ورابط منتهي ومخزون غير كافٍ ودفعة مرفوضة.
التفويض وعزل المستأجرين
أثبت أن مستخدمًا لا يرى سجلات غيره ولا يعدلها، وأن الزائر يحول عن الصفحات الخاصة. في المنتجات متعددة المستأجرين أنشئ اثنين وتحقق من عدم عبور البيانات. الاختبارات قصيرة وتمنع حوادث محرجة.
كل خطأ تصلحه
عند الإبلاغ عن خلل، اكتب اختبارًا يعيد إنتاجه ويفشل، ثم أصلح الشيفرة واترك الاختبار. تنمو المجموعة بمرور الوقت في المواضع الهشة فعلًا.
نظم الاختبارات لتبقى مقروءة
يتكون الاختبار الجيد من إعداد البيانات، وتنفيذ الطلب، والتحقق من النتيجة. سمّ الاختبار وفق السلوك مثل test_guest_cannot_view_invoice كي يوضح الفشل ما تعطل.
public function test_customer_can_cancel_own_booking(): void
{
$booking = Booking::factory()->create();
$this->actingAs($booking->customer)
->post(route('bookings.cancel', $booking))
->assertRedirect();
$this->assertSame('cancelled', $booking->fresh()->status);
}
استخدم المصانع
تنشئ مصانع النماذج سجلات واقعية بسطر واحد، وتجعل حالات مثل منشور ومسودة ومتأخر هدف الاختبار واضحًا. حافظ على قرب المصنع من بيانات الإنتاج الصحيحة كي يفشل الاختبار للسبب المناسب.
زوّر ما لا تملكه
يتيح Laravel محاكاة البريد والإشعارات والقوائم والأحداث والتخزين وطلبات HTTP. استخدمها كيلا ترسل الاختبارات بريدًا حقيقيًا أو تتصل بالدفع، ثم تحقق من إرسال الرسالة أو المهمة الصحيحة. اختبر حدود التكامل منفردة بردود مسجلة أو محاكاة.
متى تفيد اختبارات الوحدات؟
استخدمها للمنطق الصافي ذي الفروع الكثيرة: حساب الأسعار والضرائب والخصومات والتواريخ والجداول والمحللات والمنسقات. تعمل بسرعة وتحدد موضع الخلل. لا تحاكِ كل شيء لاختبار متحكم؛ اختبار الميزة أوضح وأوثق.
حافظ على سرعة المجموعة وموثوقيتها
- استخدم قاعدة داخل الذاكرة أو مخصصة للاختبار وجددها بسمات Laravel. يفيد التجديد الكسول عندما لا تستخدم اختبارات كثيرة قاعدة البيانات.
- شغل الاختبارات بالتوازي إذا تجاوزت المجموعة دقيقة أو دقيقتين.
- أصلح الاختبارات المتذبذبة أو احذفها سريعًا؛ فالمجموعة غير الموثوقة تُهمل.
- شغلها في كل طلب دمج عبر التكامل المستمر، وامنع الدمج عند الفشل.
- شغل مجموعة مركزة محليًا حسب الملف أو الاسم، ثم المجموعة كاملة قبل الإصدار.
أضف اختبارات المتصفح والواجهة بانتقائية
في تطبيقات Inertia وReact مثل Earth Movers ERP ومنصة نارمار إكسبريس للشحن، تستطيع اختبارات الخادم التحقق من مكون الصفحة وخصائصه وتغطية مخاطر كثيرة دون متصفح. خصص اختبارات المتصفح لعدد قليل من الرحلات الحرجة لأنها أبطأ وأكثر هشاشة.
ما القدر الكافي؟
السعي وراء نسبة تغطية يشجع اختبارات سطحية. اسأل إن كانت اختباراتك ستلتقط الأخطاء الأعلى كلفة. إذا استطاع الفريق النشر عصر الخميس دون قلق، فلديه تغطية مفيدة؛ أما تجنب ملفات بعينها فيشير إلى نقصها.
ابدأ غدًا
إذا خلا مشروعك من الاختبارات، لا تتوقف لتكتب المئات. أضف اختبار ميزة للخلل التالي والميزة التالية، وبعض اختبارات المصادقة وأهم إجراء تجاري. تتحول العادة خلال أشهر إلى جزء من التسليم.
نعد الاختبارات في نارمار جزءًا من التسليم لا إضافة اختيارية. إذا أردت إدخال استراتيجية اختبار إلى مشروع Laravel أو تولي تطبيق يفتقر إليها، تصفح خدماتنا أو تواصل مع الفريق.



