PHPUnit の HTTP サーバー テスト ケースを提供します。このサーバーは、ネットワーク関連の呼び出しをテストするために PHP の組み込みサーバーを利用しています。
このライブラリには、PHP 8.0、8,1、および 8.2 を含む PHP 7.3 以降が必要です。 PHPUnit バージョン 8 および 9 で実行されます。
composer require giberti/phpunit-local-server
PHPUnitFrameworkTestCase
を拡張する場合と同様にGibertiPHPUnitLocalServerLocalServerTestCase
を拡張します。$phpBinary
プロパティをオーバーライドすることで、別のphp
バイナリを提供できます。 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 でコードをテストするのに役立ちます。以下の例では、サーバーはホスト テスト システム上の/usr/local/bin/
にある PHP 7.3 および 8.1 実行可能ファイルで起動します。あなたの進む道は異なるかもしれません。
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