Laravelでテストファイルを作成する方法(make:testコマンド)
生徒
「Laravelでテストファイルを作るにはどうすればいいんですか?」
先生
「Laravelには、テストファイルを簡単に作成できる便利なコマンドが用意されています。make:testコマンドを使えば、すぐにテストを始められますよ。」
生徒
「コマンドって難しそうですが、初心者でも使えますか?」
先生
「はい、とても簡単です。それでは、テストファイルの作成方法を一つずつ見ていきましょう!」
1. make:testコマンドとは?
Laravelのmake:testコマンドは、テストファイルを自動的に作成してくれる便利な機能です。artisan(アーティザン)と呼ばれるLaravelの開発支援ツールの一つで、面倒なファイル作成作業を一瞬で完了させることができます。
例えるなら、料理のレシピ帳を作るときに、最初から白紙のノートに書くのではなく、あらかじめ項目が印刷されたテンプレートを使うようなものです。必要な部分だけを埋めればよいので、作業がとても楽になります。このコマンドを使えば、テストに必要な基本的なコード構造が自動的に用意されるため、初心者でもすぐにテストを書き始めることができます。
artisanコマンドは、コマンドライン(ターミナルやコマンドプロンプト)という黒い画面から実行します。パソコンに文字で命令を伝える方法で、慣れないうちは難しく感じるかもしれませんが、何度か使ううちにすぐに慣れてきます。
2. 基本的なテストファイルの作成方法
それでは実際にテストファイルを作成してみましょう。まず、Laravelプロジェクトのルートディレクトリ(プロジェクトフォルダの一番上の階層)でコマンドラインを開きます。Windowsの場合は、プロジェクトフォルダを開いた状態でアドレスバーにcmdと入力してエンターキーを押すと、そのフォルダでコマンドプロンプトが開きます。
次に、以下のコマンドを入力してエンターキーを押します。
php artisan make:test UserTest
このコマンドを実行すると、tests/Feature/UserTest.phpというファイルが自動的に作成されます。コマンドの意味を分解すると以下のようになります。
php: PHPプログラムを実行するという意味artisan: Laravelの開発支援ツールを使うという意味make:test: テストファイルを作成するという命令UserTest: 作成するテストファイルの名前
コマンドが成功すると、画面に「Test created successfully」と表示されます。これでテストファイルの準備が完了しました。
3. 作成されたテストファイルの中身
make:testコマンドで作成されたファイルを開いてみましょう。テキストエディタやIDEでファイルを開くと、以下のようなコードが自動的に書かれています。
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class UserTest extends TestCase
{
/**
* A basic feature test example.
*/
public function test_example(): void
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
このコードには、テストを書くために必要な基本構造がすべて含まれています。namespaceはファイルの場所を示し、useは必要な機能を読み込んでいます。class UserTest extends TestCaseの部分は、このファイルがテストクラスであることを宣言しています。
最初からtest_exampleというサンプルのテストメソッドが用意されているので、これを参考にして自分のテストを書くことができます。このサンプルは、ルートURL(トップページ)にアクセスして、HTTPステータスコードが200(正常)であることを確認するテストです。
4. Unitテストファイルの作成方法
デフォルトではFeatureテストが作成されますが、Unitテストを作りたい場合は--unitオプションを付けます。Unitテストは小さな機能単位をテストするためのもので、実行速度が速いという特徴があります。
php artisan make:test CalculatorTest --unit
このコマンドを実行すると、tests/Unit/CalculatorTest.phpというファイルが作成されます。Unitテストファイルの中身は以下のようになっています。
<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase
{
/**
* A basic unit test example.
*/
public function test_example(): void
{
$this->assertTrue(true);
}
}
Featureテストとの違いは、継承しているクラスが異なることです。UnitテストはPHPUnit\Framework\TestCaseを継承していて、LaravelのHTTP機能を使わないシンプルな構造になっています。これにより、データベースやルーティングなどの外部要素に依存せず、純粋なロジックだけをテストできます。
5. テストファイルの命名規則
テストファイルには決まった命名規則(名前の付け方のルール)があります。この規則を守らないと、テストが正しく実行されないことがあります。
重要な命名規則
- ファイル名は必ず
Testで終わる必要があります - クラス名もファイル名と同じく
Testで終わります - テストメソッド名は
test_で始めるか、@testアノテーションを付けます
例えば、商品機能をテストする場合、ProductTestやProductListTestのような名前を付けます。間違ってProductだけにしたり、TestProductのように順序を逆にしたりしないよう注意が必要です。
テストメソッドの名前は、何をテストしているのか分かりやすい名前を付けることが大切です。日本語でも問題ありません。
public function test_商品が正しく登録される(): void
{
// テストの内容
}
public function test_削除された商品は表示されない(): void
{
// テストの内容
}
このように具体的な名前を付けることで、テストが失敗したときにすぐに問題箇所を特定できます。
6. 複数のテストファイルを一度に作成する
大きなプロジェクトでは、複数のテストファイルが必要になることがあります。一つずつコマンドを実行しても良いのですが、まとめて作成することもできます。
例えば、ユーザー機能に関連する複数のテストを作る場合は、以下のように実行します。
php artisan make:test UserRegistrationTest
php artisan make:test UserLoginTest
php artisan make:test UserProfileTest
また、同じ機能に対してFeatureテストとUnitテストの両方を作りたい場合もあります。その場合は以下のように実行します。
php artisan make:test ProductTest
php artisan make:test ProductTest --unit
ただし、同じ名前でFeatureテストとUnitテストを作ると混乱しやすいので、実際の開発ではProductFeatureTestとProductUnitTestのように区別できる名前を付けることをおすすめします。
7. テストファイルの保存場所を確認する
make:testコマンドで作成されたファイルは、自動的に適切な場所に保存されます。保存場所を理解しておくことで、ファイルを探したり整理したりするのが楽になります。
tests/Feature/フォルダに保存されます
実際のユーザー操作をテストする機能テスト用
tests/Unit/フォルダに保存されます
小さな機能単位をテストする単体テスト用
これらのフォルダは、Laravelプロジェクトを作成したときに自動的に作られています。エディタやIDEのファイルツリーから簡単にアクセスできます。テストファイルが増えてきたら、さらにサブフォルダを作って整理することもできます。例えば、tests/Feature/User/やtests/Feature/Product/のように機能ごとに分けると管理しやすくなります。
8. 作成したテストファイルを編集する
テストファイルを作成したら、実際のテストコードを書いていきます。サンプルのtest_exampleメソッドを削除または編集して、自分のテストを追加しましょう。
例えば、商品一覧ページのテストを書く場合は以下のようになります。
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Product;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ProductTest extends TestCase
{
use RefreshDatabase;
public function test_商品一覧ページが表示される(): void
{
$response = $this->get('/products');
$response->assertStatus(200);
}
public function test_商品が作成できる(): void
{
$product = Product::create([
'name' => 'ノートパソコン',
'price' => 80000
]);
$this->assertDatabaseHas('products', [
'name' => 'ノートパソコン'
]);
}
}
このように、一つのテストファイルに複数のテストメソッドを書くことができます。関連する機能のテストをまとめることで、テストファイルが整理されて見やすくなります。各テストメソッドは独立して実行されるため、一つのテストが失敗しても他のテストには影響しません。
9. テストファイル作成時のよくあるエラー
make:testコマンドを使う際に、初心者がよく遭遇するエラーとその解決方法を紹介します。
エラー1: コマンドが見つからない
「php artisan command not found」のようなエラーが出る場合は、現在いるディレクトリがLaravelプロジェクトのルートではない可能性があります。cdコマンドでプロジェクトフォルダに移動してから再度実行してください。
エラー2: 同じ名前のファイルが既に存在する
既に同じ名前のテストファイルがある場合、上書きするか確認されます。間違って既存のファイルを消さないよう、別の名前を付けることをおすすめします。
エラー3: 権限エラー
ファイルを作成する権限がない場合にエラーが発生することがあります。Windowsではコマンドプロンプトを管理者として実行するか、MacやLinuxではsudoコマンドを使う必要がある場合があります。ただし、通常は権限の問題が起きないように設定されているはずです。
これらのエラーに遭遇しても慌てずに、エラーメッセージをよく読んで対処しましょう。エラーメッセージには問題の原因と解決のヒントが含まれていることが多いです。
10. テストファイル作成後の次のステップ
テストファイルを作成したら、実際にテストを実行してみましょう。以下のコマンドでテストを実行できます。
php artisan test
このコマンドを実行すると、testsフォルダ内のすべてのテストが実行され、結果が表示されます。最初は、自動生成されたサンプルテストが成功することを確認できます。
特定のテストファイルだけを実行したい場合は、ファイルパスを指定することもできます。
php artisan test tests/Feature/UserTest.php
テストが失敗した場合は、赤色でエラーメッセージが表示されます。エラーメッセージを読んで、コードを修正してから再度テストを実行します。テストが成功するまでこの作業を繰り返すことで、プログラムの品質を高めることができます。
make:testコマンドを使いこなせるようになると、テスト駆動開発がとても楽になります。新しい機能を追加するたびにテストファイルを作成する習慣をつけることで、バグの少ない高品質なアプリケーションを開発できるようになります。