Fornece um caso de teste de servidor HTTP para PHPUnit. O servidor é alimentado pelo servidor integrado do PHP para teste de chamadas relacionadas à rede.
Esta biblioteca requer PHP 7.3 ou mais recente, incluindo PHP 8.0, 8,1 e 8.2. Ele será executado com as versões 8 e 9 do PHPUnit.
composer require giberti/phpunit-local-server
GibertiPHPUnitLocalServerLocalServerTestCase
como se estivesse estendendo PHPUnitFrameworkTestCase
php
diferente substituindo a propriedade estática $phpBinary
na classe. Chame o método auxiliar createServerWithDocroot()
ou createServerWithRouter()
e execute seu teste.
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 otimizar o desempenho dos seus testes, é melhor reutilizar o servidor sempre que possível. Para facilitar isso, basta iniciar o servidor no início da classe definindo um método setupBeforeClass()
com a configuração desejada.
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 ' );
}
}
É possível executar o servidor em um tempo de execução PHP diferente da versão que executa seu conjunto de testes. Isso pode ajudar a testar seu código em várias versões do PHP. No exemplo abaixo, o servidor iniciará com o executável PHP 7.3 e 8.1 em /usr/local/bin/
no sistema de teste host. Seu caminho pode 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 ' );
}
}
Os métodos a seguir são fornecidos para interagir com o servidor local.
Cria um servidor local usando uma raiz de documento.
static :: createServerWithDocroot ( ' ./path/to/site/files ' );
Cria um servidor local usando um arquivo roteador. Se você estiver usando uma estrutura, provavelmente este é o arquivo index.php
na rota do seu documento.
static :: createServerWithRouter ( ' ./path/to/router.php ' );
Remove o servidor local. Útil para redefinir o estado da sessão. Isso é chamado automaticamente no método de ciclo de vida tearDownAfterClass()
.
static :: destroyServer ();
A porta do servidor normalmente será 8000
, porém ela é atribuída dinamicamente em caso de conflito. A maneira mais segura de acessar o host é chamar o método getServerUrl()
e usá-lo como raiz para qualquer construção de URL.
$ schemeHost = $ this -> getServerUrl ();
$ fullUrl = $ schemeHost . " /path/to/file/to/access " ;
echo $ fullUrl ; // http://localhost:8000/path/to/file/to/access