مقدمة إلى التعامل مع الاختبارات في Laravel

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث

مقدمة

بُني Laravel آخذًا الاختبارات بالحسبان؛ إذ يدعم Laravel الاختبارات باستخدام PHPUnit، ويهيّئ ملف phpunit.xml جاهز للعمل بما يناسب تطبيقك. كما دُعم إطار العمل بتوابع مساعدة لتمهيد الطريق أمام اختبار تطبيقاتك بشكل سلس وسهل.

يحتوي المجلد tests الخاص بتطبيقك افتراضيًّا على مجلّدين فرعيين: Feature و Unit. تمكنك اختبارات الوحدة Unit tests من التركيز على جزء صغير ومعزول من الشيفرة الخاصة بك، إذ أنّ معظم اختبارات الوحدة تركّز فقط على تابع واحد؛ بينما تستخدم اختبارات الميزات Feature tests لاختبار جزء كبير من الشيفرة، بما فيها كيفية تواصل مجموعة من الكائنات، أو حتى إمكانية إرسال طلب HTTP إلى نقطة نهاية JSON معيّنة.

يمكنك الاطلاع على ملف ExampleTest.php المضمّن في كلا المجلّدين Feature و Unit. بعد تثبيت مشروعك باستخدام إطار عمل Laravel، شغّل الأمر phpunit للبدء باختباراتك.

البيئة

عند تشغيل الاختبارات باستخدام phpunit، سيُهيئ Laravel بيئة العمل الحالية إلى testing، بسبب متحولات البيئة المعرّفة في ملف phpunit.xml. سيقوم Laravel أيضًا بتهيئة الجلسة session وذاكرة التخزين المؤقتة إلى مصفوفة برنامج التشغيل( ‎(array driver أثناء الاختبار، مما يعني أنّه لن يحتفظ ببيانات الجلسة وذاكرة التخزين المؤقتة أثناء الاختبار.

أنت حر بتعريف متغيرات بيئة الاختبار الأخرى إذا دعت الحاجة لذلك. يمكنك تعريف متغيرات بيئة الاختبار في ملف phpunit.xml، لكن تأكد من تنظيف التخزين المؤقت للإعدادات باستخدام أمر artisan config:clear وذلك قبل تشغيل الاختبارات.

علاوةً على ذلك، يمكنك إنشاء ملف ‎.env.testing في جذر المشروع الخاص بك. سيعيد هذا الملف تعيين الإعدادات المعرّفة في ملف ‎.env عند تشغيل اختبارات PHPUnit أو عند تشغيل أوامر artisan باستخدام الخيار ‎--env=testing.

إنشاء وتشغيل الاختبارات

لإنشاء حالة اختبار جديدة، استخدم أمر artisan make:test:

// لإنشاء حالة اختبار في مجلد الميزات.
php artisan make:test UserTest

// لإنشاء حالة اختبار في مجلد وحدات الاختبار.
php artisan make:test UserTest --unit

عندما يولَّد ملف الاختبار، يمكنك تعريف توابع الاختبار كما تقوم بالعادة باستخدام PHPUnit. ولتشغيل اختباراتك، شغل الأمر phpunit من واجهة الأوامر:

<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ExampleTest extends TestCase
{
   /**
    * مثال بسيط عن حالة اختبار
    *
    * @return void
    */
   public function testBasicTest()
   {
       $this->assertTrue(true);
   }
}

ملاحظة: إذا قمت بتعريف التابع setUp الخاص بك، تأكد من مناداة التابع الأب parent::setUp()‎.

مصادر