Fournit un scénario de test de serveur HTTP pour PHPUnit. Le serveur est alimenté par le serveur intégré de PHP pour tester les appels liés au réseau.
Cette bibliothèque nécessite PHP 7.3 ou version ultérieure, notamment PHP 8.0, 8,1 et 8.2. Il fonctionnera avec les versions 8 et 9 de PHPUnit.
composer require giberti/phpunit-local-server
GibertiPHPUnitLocalServerLocalServerTestCase
comme si vous étendiez PHPUnitFrameworkTestCase
php
différent en remplaçant la propriété statique $phpBinary
sur la classe. Appelez la méthode d'assistance createServerWithDocroot()
ou createServerWithRouter()
, puis exécutez votre test.
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 ' );
}
}
Pour optimiser les performances de vos tests, il est préférable de réutiliser le serveur autant que possible. Pour faciliter cela, démarrez simplement le serveur au début de la classe en définissant une méthode setupBeforeClass()
avec la configuration souhaitée.
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 ' );
}
}
Il est possible d'exécuter le serveur sous un runtime PHP différent de la version exécutant votre suite de tests. Cela peut vous aider à tester votre code sous plusieurs versions de PHP. Dans l'exemple ci-dessous, le serveur démarrera avec l'exécutable PHP 7.3 et 8.1 dans /usr/local/bin/
sur le système de test hôte. Votre chemin peut être différent.
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 ' );
}
}
Les méthodes suivantes sont fournies pour interagir avec le serveur local.
Crée un serveur local à l'aide d'une racine de document.
static :: createServerWithDocroot ( ' ./path/to/site/files ' );
Crée un serveur local à l'aide d'un fichier de routeur. Si vous utilisez un framework, il s'agit probablement du fichier index.php
dans votre itinéraire de documents.
static :: createServerWithRouter ( ' ./path/to/router.php ' );
Supprime le serveur local. Utile pour réinitialiser l'état de la session. Ceci est automatiquement appelé dans la méthode de cycle de vie tearDownAfterClass()
.
static :: destroyServer ();
Le port du serveur sera généralement 8000
, cependant, il est attribué dynamiquement en cas de conflit. Le moyen le plus sûr d'accéder à l'hôte est d'appeler la méthode getServerUrl()
et de l'utiliser comme racine pour toute construction d'URL.
$ schemeHost = $ this -> getServerUrl ();
$ fullUrl = $ schemeHost . " /path/to/file/to/access " ;
echo $ fullUrl ; // http://localhost:8000/path/to/file/to/access