サーチ…
前書き
テスト可能なコードを書くことは、堅牢で、維持可能で、機敏なプロジェクトを構築する上で重要な部分です。 PHPの最も広く使用されているテストフレームワーク、 PHPUnitのサポートはLaravelに組み込まれています。 PHPUnitはphpunit.xml
ファイルを使用して設定されますphpunit.xml
ファイルはすべての新しいLaravelアプリケーションのルートディレクトリにあります。
tests
ディレクトリには、ルートディレクトリにも、アプリケーションの各部分をテストするためのロジックを保持する個々のテストファイルが含まれています。もちろん、アプリケーションをビルドするときに開発者としてこれらのテストを書くのはあなたの責任ですが、LaravelにはExampleTest.php
というサンプルファイルが含まれています。
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$this->visit('/')
->see('Laravel 5');
}
}
testBasicExample()
メソッドでは、サイトのインデックスページにアクセスして、そのページのどこかにLaravel 5
というテキストが表示されていることを確認します。テキストが存在しない場合、テストは失敗し、エラーが生成されます。
ミドルウェアなしで、新しいデータベースでテスト
職人がテストを実行する前に新しいデータベースを移行させるには、 use DatabaseMigrations
。また、Authのようなミドルウェアを避けたい場合は、 use WithoutMiddleware
。
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends TestCase
{
use DatabaseMigrations, WithoutMiddleware;
/**
* A basic functional test example.
*
* @return void
*/
public function testExampleIndex()
{
$this->visit('/protected-page')
->see('All good');
}
}
複数のデータベース接続のためのデータベーストランザクション
DatabaseTransactions
特性により、データベースはテスト中にすべての変更をロールバックできます。複数のデータベースをロールバックする場合は、 $connectionsToTransact
プロパティを設定する必要があります
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends TestCase
{
use DatabaseTransactions;
$connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack
public function testExampleIndex()
{
$this->visit('/action/parameter')
->see('items');
}
}
メモリ内のデータベースを使用してセットアップをテストする
セットアップ後、テストフレームワーク(PHPUnit)は:memory:
データベースを使用します。
config / database.php
'connections' => [
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
.
.
.
./phpunit.xml
.
.
.
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="APP_URL" value="http://example.dev"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite_testing"/>
</php>
</phpunit>
構成
phpunit.xmlファイルはテスト用のデフォルト設定ファイルであり、PHPUnitでテストするために既に設定されています。
デフォルトのテスト環境APP_ENV
は、 array
がキャッシュ・ドライバCACHE_DRIVER
であるtesting
として定義されていtesting
。この設定では、テスト中にデータ(セッション/キャッシュ)は保持されません。
ホームステッドのような特定の環境に対してテストを実行するには、デフォルトを次のように変更します。
<env name="DB_HOST" value="192.168.10.10"/>
<env name="DB_DATABASE" value="homestead"/>
<env name="DB_USERNAME" value="homestead"/>
<env name="DB_PASSWORD" value="secret"/>
または、一時的なメモリデータベースを使用するには :
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
最後に、 Laravelのドキュメントを覚えておいてください。
テストを実行する前に、
config:clear
Artisanコマンドを使って設定キャッシュをconfig:clear
てください!