يوفر حالة اختبار خادم HTTP لـ PHPUnit. يتم تشغيل الخادم بواسطة خادم PHP المدمج لاختبار المكالمات المتعلقة بالشبكة.
تتطلب هذه المكتبة PHP 7.3 أو أحدث، بما في ذلك PHP 8.0 و8,1 و8.2. سيتم تشغيله مع PHPUnit الإصدارين 8 و9.
composer require giberti/phpunit-local-server
GibertiPHPUnitLocalServerLocalServerTestCase
كما لو كنت تقوم بتوسيع PHPUnitFrameworkTestCase
php
مختلف عن طريق تجاوز خاصية $phpBinary
الثابتة في الفصل. اتصل إما بالطريقة المساعدة createServerWithDocroot()
أو createServerWithRouter()
ثم قم بتنفيذ الاختبار.
use Giberti PHPUnitLocalServer LocalServerTestCase ;
class Test extends LocalServerTestCase
{
public function testFoo () {
static :: createServerWithDocroot ( ' ./tests/localhost ' );
$ url = $ this -> getLocalServerUrl () . ' /foo ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
}
لتحسين أداء اختباراتك، من الأفضل إعادة استخدام الخادم كلما أمكن ذلك. لتسهيل ذلك، ما عليك سوى تشغيل الخادم في بداية الفصل الدراسي عن طريق تحديد طريقة setupBeforeClass()
بالتكوين المطلوب.
use Giberti PHPUnitLocalServer LocalServerTestCase ;
class Test extends LocalServerTestCase
{
public static function setupBeforeClass () {
static :: createServerWithDocroot ( ' ./tests/localhost ' );
}
public function testFoo () {
$ url = $ this -> getLocalServer () . ' /foo ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
public function testBar () {
$ url = $ this -> getLocalServer () . ' /bar ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
}
من الممكن تشغيل الخادم ضمن وقت تشغيل PHP مختلف عن الإصدار الذي يقوم بتشغيل مجموعة الاختبار الخاصة بك. يمكن أن يساعد هذا في اختبار التعليمات البرمجية الخاصة بك ضمن إصدارات متعددة من PHP. في المثال أدناه، سيبدأ الخادم بإصدار PHP 7.3 و8.1 القابل للتنفيذ في /usr/local/bin/
على نظام الاختبار المضيف. قد يكون طريقك مختلفا.
use Giberti PHPUnitLocalServer LocalServerTestCase ;
class Test73 extends LocalServerTestCase
{
static $ phpBinary = ' /usr/local/bin/php73 ' ;
public function testFoo () {
static :: createServerWithDocroot ( ' ./tests/localhost ' );
$ url = $ this -> getLocalServer () . ' /foo ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
}
class Test81 extends LocalServerTestCase
{
static $ phpBinary = ' /usr/local/bin/php81 ' ;
public function testFoo () {
static :: createServerWithDocroot ( ' ./tests/localhost ' );
$ url = $ this -> getLocalServer () . ' /foo ' ;
$ content = file_get_contents ( $ url );
$ this -> assertEquals ( ' ... ' , $ content , ' Content mismatch ' );
}
}
يتم توفير الطرق التالية للتفاعل مع الخادم المحلي.
إنشاء خادم محلي باستخدام جذر المستند.
static :: createServerWithDocroot ( ' ./path/to/site/files ' );
إنشاء خادم محلي باستخدام ملف جهاز التوجيه. إذا كنت تستخدم إطار عمل، فمن المرجح أن يكون هذا هو ملف index.php
الموجود في مسار مستندك.
static :: createServerWithRouter ( ' ./path/to/router.php ' );
يزيل الخادم المحلي. مفيد لإعادة ضبط حالة الجلسة. يتم استدعاء هذا تلقائيًا في طريقة دورة حياة tearDownAfterClass()
.
static :: destroyServer ();
عادةً ما يكون منفذ الخادم هو 8000
، ومع ذلك، يتم تعيينه ديناميكيًا في حالة حدوث تعارض. الطريقة الأكثر أمانًا للوصول إلى المضيف هي استدعاء طريقة getServerUrl()
واستخدامها كجذر لأي إنشاء عنوان URL.
$ schemeHost = $ this -> getServerUrl ();
$ fullUrl = $ schemeHost . " /path/to/file/to/access " ;
echo $ fullUrl ; // http://localhost:8000/path/to/file/to/access