Codeception لـ PHP: دليل شامل مع أمثلة عملية
1. ما هو Codeception ولماذا تحتاجه؟
Codeception هو إطار عمل متكامل لاختبار تطبيقات PHP، يجمع أفضل ممارسات الاختبارات الوحدوية (Unit)، الوظيفية (Functional)، القبولية (Acceptance)، والتكاملية (Integration). على عكس PHPUnit التقليدي، يقدم Codeception واجهة برمجية واحدة وبديهية لجميع أنواع الاختبارات، بالإضافة إلى أدوات قوية للتعامل مع المتصفحات (عبر WebDriver أو PhpBrowser)، قواعد البيانات، REST API، وحتى JavaScript.
الهدف الأساسي لـ Codeception هو جعل عملية كتابة الاختبارات بسيطة وقابلة للقراءة قدر الإمكان. يستخدم الإطار صيغة تشبه BDD (التطوير القائم على السلوك)، حيث تُوصف الاختبارات بلغة طبيعية باستخدام دوال إجرائية مثل: $I->amOnPage('/login')، $I->fillField('email', 'user@example.com')، $I->click('Login'). هذا يسمح ليس فقط للمطورين، بل أيضًا للمختبرين والمحللين والمديرين بفهم ما يتم اختباره بسهولة.
Codeception لا غنى عنه في المشاريع التي تتطلب اختبارات شاملة: من التحقق من الفئات الفردية (اختبارات الوحدة) إلى محاكاة إجراءات المستخدم الحقيقي في المتصفح (اختبارات القبول). يدعم الأطر الشهيرة (Laravel، Symfony، Yii2، Zend)، ويدير تلقائيًا معاملات قاعدة البيانات، ويلتقط لقطات شاشة عند الأخطاء، وينشئ تقارير مفصلة. إذا كنت ترغب في تحسين جودة الكود وتقليل وقت اختبارات الانحدار، فإن Codeception سيكون رفيقك الموثوق.
2. التثبيت
يتم توزيع Codeception عبر Composer، مدير الحزم القياسي لـ PHP. تأكد من تثبيت PHP الإصدار 7.4 أو أعلى و Composer.
قم بتنفيذ الأمر التالي في الطرفية (Terminal) داخل جذر مشروعك:
composer require --dev codeception/codeception
بعد التثبيت، يمكنك تهيئة Codeception في المشروع:
vendor/bin/codecept init
سينشئ هذا الأمر هيكل الدليل الأساسي: tests/ مع مجلدات فرعية unit و functional و acceptance، بالإضافة إلى ملف الإعدادات codeception.yml.
للعمل مع اختبارات المتصفح، قم بتثبيت وحدة WebDriver (إذا كنت تخطط لاستخدام Selenium أو ChromeDriver):
composer require --dev codeception/module-webdriver
لاختبار REST API، قم بتثبيت وحدة REST:
composer require --dev codeception/module-rest
3. البداية السريعة — مثال عملي بسيط
لننشئ اختبار وحدة بسيطًا للتحقق من دالة رياضية. بعد التهيئة (codecept init)، سيكون لديك بالفعل ملف tests/unit.suite.yml. دعنا نعدله لتضمين وحدة Asserts:
# tests/unit.suite.yml
actor: UnitTester
modules:
enabled:
- Asserts
الآن، لننشئ ملف الاختبار tests/unit/MathTest.php:
<?php
use Codeception\Test\Unit;
class MathTest extends Unit
{
protected UnitTester $tester;
public function testAddition()
{
$result = 2 + 3;
$this->tester->assertEquals(5, $result, '2 + 3 يجب أن يساوي 5');
}
public function testSubtraction()
{
$result = 10 - 4;
$this->tester->assertGreaterThan(5, $result, '10 - 4 يجب أن يكون أكبر من 5');
}
}
قم بتشغيل الاختبار:
vendor/bin/codecept run unit
يجب أن ترى علامة خضراء