Proporciona un caso de prueba de servidor HTTP para PHPUnit. El servidor funciona con el servidor integrado de PHP para probar llamadas relacionadas con la red.
Esta biblioteca requiere PHP 7.3 o posterior, incluidos PHP 8.0, 8,1 y 8.2. Se ejecutará con las versiones 8 y 9 de PHPUnit.
composer require giberti/phpunit-local-server
GibertiPHPUnitLocalServerLocalServerTestCase
como si estuviera extendiendo PHPUnitFrameworkTestCase
php
diferente anulando la propiedad estática $phpBinary
en la clase. Llame al método auxiliar createServerWithDocroot()
o createServerWithRouter()
y luego ejecute su prueba.
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 ' );
}
}
Para optimizar el rendimiento de sus pruebas, es mejor reutilizar el servidor siempre que sea posible. Para hacer esto más fácil, simplemente inicie el servidor al comienzo de la clase definiendo un método setupBeforeClass()
con la configuración deseada.
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 ' );
}
}
Es posible ejecutar el servidor con un tiempo de ejecución de PHP diferente al de la versión que ejecuta su conjunto de pruebas. Esto puede ayudar a probar su código en múltiples versiones de PHP. En el siguiente ejemplo, el servidor se iniciará con el ejecutable PHP 7.3 y 8.1 en /usr/local/bin/
en el sistema de prueba del host. Tu camino puede ser diferente.
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 ' );
}
}
Se proporcionan los siguientes métodos para interactuar con el servidor local.
Crea un servidor local utilizando una raíz de documento.
static :: createServerWithDocroot ( ' ./path/to/site/files ' );
Crea un servidor local utilizando un archivo de enrutador. Si está utilizando un marco, lo más probable es que este sea el archivo index.php
en la ruta de su documento.
static :: createServerWithRouter ( ' ./path/to/router.php ' );
Elimina el servidor local. Útil para restablecer el estado de la sesión. Esto se llama automáticamente en el método de ciclo de vida tearDownAfterClass()
.
static :: destroyServer ();
El puerto para el servidor normalmente será 8000
, sin embargo, se asigna dinámicamente en caso de conflicto. La forma más segura de acceder al host es llamar al método getServerUrl()
y usarlo como raíz para cualquier construcción de URL.
$ schemeHost = $ this -> getServerUrl ();
$ fullUrl = $ schemeHost . " /path/to/file/to/access " ;
echo $ fullUrl ; // http://localhost:8000/path/to/file/to/access