مقدمة إلى التعامل مع الاختبارات
مقدمة
بُني 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()
.