انتقل إلى محتوى الدرس
الدرس 58
دورة إطار العمل Laravel

اختبار قواعد البيانات وتوكيدات واجهات API في LaravelDatabase Testing with Refresh Database and API Assertions

إعادة تهيئة قاعدة بيانات الاختبار تلقائياً بسمة RefreshDatabase والتحقق من السجلات واستجابات JSON API وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يجب ألا تترك الاختبارات المعتمدة على قاعدة البيانات أي سجلات متبقية تلوث الاختبارات التالية أو تسبب نتائج غير مستقرة. يتيح تضمين السمة RefreshDatabase داخل كلاس الاختبار تشغيل التهجيرات مرة واحدة وتغليف كل دالة اختبار داخل معاملة قاعدة بيانات يتم التراجع عنها تلقائياً فور انتهاء الدالة.

  • منع تلوث البيانات (Zero Test Pollution): تبدأ كل دالة اختبار بقاعدة بيانات فارغة ومُهجرة بالكامل دون أي أثر من الاختبارات السابقة.
  • سرعة التراجع عن المعاملة (Transaction Speed): بدلاً من هدم الجداول وإعادة بنائها في كل مرة، يتراجع RefreshDatabase عن المعاملة في أجزاء من الثانية.
  • التوافق مع الذاكرة (In-Memory Compatibility): يعمل بكفاءة عالية مع قواعد SQLite في الذاكرة أو قواعد بيانات الاختبار المستقلة.
مخطط معماري يوضح اختبار قواعد البيانات وتوكيدات واجهات API في Laravel في إطار العمل Laravel 12
PHP
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class PostDatabaseTest extends TestCase {
    use RefreshDatabase;
}

بدلاً من إدخال عشرات الأعمدة يدوياً قبل كل اختبار، استخدم مصانع نماذج Eloquent لتوليد سجلات واقعية وعلاقات مترابطة في سطر واحد. استدع الدالة Post::factory->create لحفظ السجل في قاعدة الاختبار، أو مرر مصفوفة ترابطية لتخصيص قيم حقول معينة يهمك فحصها.

  • الإنشاء المفرد والمجمّع (Single & Batch Creation): استخدم دالة create لسجل واحد أو اربطها بدالة count(5) لتوليد مجموعة سجلات.
  • تخصيص الحقول المهمة (Explicit Attribute Overrides): مرر القيم المراد اختبارها مثل ['is_published' => true] داخل دالة create لزيادة وضوح الاختبار.
  • بناء العلاقات بالمصانع (Relationship Factories): اربط دالة for أو دالة has لتوليد السجل الأب مع سجلاته الفرعية في خطوة واحدة.
PHP
$user = User::factory()->create();

$post = Post::factory()
    ->for($user)
    ->create(['title' => 'Factory Post']);

بعد محاكاة طلب إضافة أو تعديل أو حذف، تحقق من حدوث التغيير الفعلي داخل الجداول باستخدام دوال توكيد قاعدة البيانات في Laravel. استدع الدالة assertDatabaseHas للتأكد من وجود السجل بالقيم المتوقعة، والدالة assertDatabaseMissing بعد الحذف النهائي، أو الدالة assertSoftDeleted للتحقق من الحذف الناعم.

  • التحقق من حفظ السجلات (Verifying Persisted Rows): تستعلم دالة assertDatabaseHas عن الجدول للتأكد من وجود صف يطابق القيم الممررة.
  • التحقق من الحذف النهائي (Verifying Deletions): تؤكد دالة assertDatabaseMissing اختفاء السجل تماماً من الجدول بعد حذفه.
  • فحص الحذف الناعم (Soft Delete Inspection): تتأكد دالة assertSoftDeleted من بقاء السجل في الجدول مع امتلاء عمود الطابع الزمني deleted_at.
PHP
$user = User::factory()->create();
$this->actingAs($user)->post('/posts', [
    'title' => 'Saved Post',
]);
$this->assertDatabaseHas('posts', [
    'title' => 'Saved Post',
]);

عند اختبار مسارات RESTful API، استخدم الدوال getJson و postJson و putJson و deleteJson لكي يرفق Laravel رأس الرسالة Accept: application/json تلقائياً. يمكنك أيضاً محاكاة مصادقة Sanctum مع تحديد قدرات الرمز عبر دالة Sanctum::actingAs، وفحص بنية وقيم المخرجات بدالة assertJson.

  • دوال طلبات JSON (JSON Request Helpers): ترمز دوال getJson و postJson البيانات بصيغة JSON وتضبط رؤوس التفاوض تلقائياً.
  • محاكاة رموز Sanctum (Sanctum Token Simulation): استدع دالة Sanctum::actingAs مع مصفوفة القدرات لاختبار مسارات API المحمية.
  • توكيدات بنية JSON (Payload Assertions): اربط دوال assertJson أو assertJsonPath لفحص القيم المتداخلة داخل مفتاح data.
PHP
use Laravel\Sanctum\Sanctum;

$user = User::factory()->create();
Sanctum::actingAs($user, ['posts:write']);
$this->postJson('/api/posts', ['title' => 'API'])
    ->assertStatus(201)
    ->assertJson(['data' => ['title' => 'API']]);

ينبغي لاختبارات الميزات التأكد من قيام المتحكم بإطلاق المهمة الخلفية أو إرسال البريد دون تشغيل عامل الطابور فعلياً أو الاتصال بخادم SMTP. يقوم استدعاء Queue::fake أو Mail::fake باستبدال الخدمة الحقيقية في الحاوي بكائن مراقبة يسجل ما تم إطلاقه للتحقق منه برمجياً.

  • محاكاة الطوابير (Queue::fake): استدع دالة Queue::fake قبل الطلب، ثم تحقق من دفع المهمة عبر دالة Queue::assertPushed.
  • محاكاة البريد (Mail::fake): استدع دالة Mail::fake قبل الطلب، ثم تأكد من جدولة الرسالة عبر دالة Mail::assertSent.
  • محاكاة التخزين والأحداث (Storage & Event Fakes): استخدم دالة Storage::fake لاختبار رفع الملفات ودالة Event::fake لفحص إطلاق الأحداث.
PHP
use App\Jobs\ProcessPodcast;
use Illuminate\Support\Facades\Queue;

Queue::fake();

$this->postJson('/api/podcasts', ['title' => 'Ep 1']);

Queue::assertPushed(ProcessPodcast::class);

إن الجمع بين سمة RefreshDatabase ومصانع النماذج وتوكيدات JSON API ومحاكاة الخدمات يمنحك القدرة على اختبار أعقد ميزات Laravel 12 بعزل تام وسرعة فائقة. راجع أدوات اختبار قواعد البيانات والواجهات البرمجية في الملخص التالي.

وجه المقارنة الهندسيالأسلوب المتزامن أو التقليديمعيار Laravel 12 الحديث
حالة قاعدة بيانات الاختباربقاء سجلات الاختبارات السابقة مما يسبب فشل الاختبارات اللاحقةتصفير تلقائي سريع عبر المعاملات باستخدام سمة RefreshDatabase
تجهيز البيانات الاختباريةكتابة مصفوفات طويلة يدوياً لجميع أعمدة الجدول الإلزاميةتوليد فوري للسجلات والعلاقات عبر مصانع النماذج Factories
فحص استجابات JSON APIفك ترميز نص الاستجابة يدوياً وفحص المصفوفات بطرق تقليديةاستخدام دوال getJson و postJson مع توكيدات assertJson السلسة
اختبار الخدمات الجانبيةإرسال بريد فعلي أو تشغيل مهام ثقيلة أثناء تنفيذ الاختبارعزل فوري للخدمات عبر Mail::fake و Queue::fake
PHP
Mail::fake();
$user = User::factory()->create();
$this->actingAs($user)
    ->postJson('/api/orders', ['item' => 'Book'])
    ->assertStatus(201)
    ->assertJson(['item' => 'Book']);
$this->assertDatabaseHas('orders', ['item' => 'Book']);
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «اختبار قواعد البيانات وتوكيدات واجهات API في Laravel» مفاهيم تهيئة القاعدة بسمة RefreshDatabase، وتوليد بيانات الاختبار عبر المصانع، والتحقق من وجود وحذف السجلات وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «تحسين أداء تطبيق Laravel والتخزين المؤقت لبيئة الإنتاج» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Database Testing اختبار القواعد
إعادة تهيئة قاعدة بيانات الاختبار تلقائياً بسمة RefreshDatabase والتحقق من السجلات واستجابات JSON API وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
للمراجعة
02 Resetting State with RefreshDatabase تهيئة القاعدة بسمة RefreshDatabase
المفهوم الهندسي والتطبيق العملي المباشر لقسم تهيئة القاعدة بسمة RefreshDatabase في إطار العمل Laravel 12.
للمراجعة
03 Seeding Test States with Factories توليد بيانات الاختبار عبر المصانع
المفهوم الهندسي والتطبيق العملي المباشر لقسم توليد بيانات الاختبار عبر المصانع في إطار العمل Laravel 12.
للمراجعة
04 Asserting Database Records and Deletes التحقق من وجود وحذف السجلات
المفهوم الهندسي والتطبيق العملي المباشر لقسم التحقق من وجود وحذف السجلات في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «تهيئة القاعدة بسمة RefreshDatabase» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «توليد بيانات الاختبار عبر المصانع» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من تهيئة القاعدة بسمة RefreshDatabase في إطار العمل Laravel 12؟

يسهم تهيئة القاعدة بسمة RefreshDatabase في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «توليد بيانات الاختبار عبر المصانع» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة التحقق من وجود وحذف السجلات بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة التحقق من وجود وحذف السجلات.

04

لماذا يُعد تطبيق اختبار واجهات JSON ومصادقة Sanctum مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

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

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق محاكاة البريد والطوابير عبر Fakes في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في مرجع توكيدات قواعد البيانات وAPI؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.