Предоставляет тестовый пример 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