テスト: スタートガイド
はじめに
Laravel はテストを意識して構築されています。実際、Pest と PHPUnit を使用したテストのサポートが最初から含まれており、phpunit.xml ファイルがアプリケーションにすでに設定されています。フレームワークには、アプリケーションを表現的にテストするための便利なヘルパーメソッドも含まれています。
デフォルトでは、アプリケーションの tests ディレクトリには Feature と Unit の2つのディレクトリが含まれています。ユニットテストは、コードの非常に小さな、独立した部分に焦点を当てたテストです。実際、ほとんどのユニットテストはおそらく単一のメソッドに焦点を当てています。"Unit" テストディレクトリ内のテストは Laravel アプリケーションを起動せず、したがってアプリケーションのデータベースや他のフレームワークサービスにアクセスできません。
フィーチャーテストは、複数のオブジェクトがどのように相互作用するか、または JSON エンドポイントへの完全な HTTP リクエストなど、コードの大きな部分をテストすることができます。一般的に、ほとんどのテストはフィーチャーテストであるべきです。この種のテストは、システム全体が意図どおりに機能していることを最も確信できます。
ExampleTest.php ファイルは、Feature と Unit テストディレクトリの両方に提供されています。新しい Laravel アプリケーションをインストールした後は、vendor/bin/pest、vendor/bin/phpunit、または php artisan test コマンドを実行してテストを実行します。
環境
テストを実行する際、Laravel は phpunit.xml ファイルで定義された環境変数のために自動的に 設定環境 を testing に設定します。また、Laravel はセッションとキャッシュを array ドライバに自動的に設定するため、テスト中にセッションやキャッシュデータが永続化されることはありません。
自由に他のテスト環境設定値を定義することができます。testing 環境変数は、アプリケーションの phpunit.xml ファイルで設定できますが、テストを実行する前に config:clear Artisan コマンドを使用して設定キャッシュをクリアしてください!
.env.testing 環境ファイル
さらに、プロジェクトのルートに .env.testing ファイルを作成することができます。このファイルは、Pest や PHPUnit テストを実行するか、--env=testing オプションを使用して Artisan コマンドを実行する際に .env ファイルの代わりに使用されます。
テストの作成
新しいテストケースを作成するには、make:test Artisan コマンドを使用します。デフォルトでは、テストは tests/Feature ディレクトリに配置されます:
php artisan make:test UserTest
tests/Unit ディレクトリ内にテストを作成したい場合は、make:test コマンドを実行する際に --unit オプションを使用できます:
php artisan make:test UserTest --unit
stub publishing を使用してテストスタブをカスタマイズすることができます。
テストが生成されたら、通常通り Pest または PHPUnit を使用してテストを定義できます。テストを実行するには、ターミナルから vendor/bin/pest、vendor/bin/phpunit、または php artisan test コマンドを実行します:
<?php
test('basic', function () {
expect(true)->toBeTrue();
});
<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*/
public function test_basic_test(): void
{
$this->assertTrue(true);
}
}
テストクラス内で独自の setUp / tearDown メソッドを定義する場合は、親クラスの対応する parent::setUp() / parent::tearDown() メソッドを呼び出すようにしてください。通常、自分自身の setUp メソッドの最初に parent::setUp() を呼び出し、tearDown メソッドの最後に parent::tearDown() を呼び出すべきです。
テストの実行
先に述べたように、テストを書いたら、pest または phpunit を使用して実行できます:
./vendor/bin/pest