ども、開発チームのカロージです。
Laravel のテストが超絶便利だったので情報共有させて頂きます。
はじめに
Laravelでのテスト実行には以下の3種類が存在しますが、
この3つのテストの方法などについて、それぞれ情報共有させて頂きます。
- UnitTest
- FeatureTest
- BrowserTest
環境と前提
まず、私の環境。
- Windows 10 Pro 64bit
- Google Chrome ブラウザバージョン: 87.0.4280.141(Official Build) (64 ビット)
- Laravel 8.x でアプリ開発中
- MySQL 5.6.x インストール済み
- その他、以下の諸々のソフトが入ってますが、今回は、Laradockやdockerなど、コンテナを使用していません。
1 2 3 4 5 6 7 8 9 10 11 |
PS > docker -v Docker version 20.10.2, build 2291f61 PS > php -v PHP 7.4.8 (cli) (built: Jul 9 2020 11:30:39) ( ZTS Visual C++ 2017 x64 ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies PS > npm -v 6.14.5 PS > node -v v8.17.0 PS > R --version |
前提として以下は「済」として進めます。
-
- Laravel(ver.8系)のインストール
- プロジェクトディレクトの生成
- マイグレーション
- シーダーの実行など
UnitTest
単体(Unit)テストは一つのメソッドが焦点で、最も細かい粒度でのテストになります。
実態としては、PHPUnitの拡張版で、最初からLaravelに含まれており、
プロジェクトファイル直下にphpunit.xml
ファイルも最初から装備されています。
個人的には、開発したクラスとテスト用クラスが、1対1になる様にファイルを生成すると管理しやすいです。
FeatureTest
機能(Feature)テストは、多くのオブジェクトがそれぞれどのように関しているかとか、
JSONエンドポイントへ完全なHTTPリクエストを送ることさえ含む、コードの幅広い範囲をテストします。
個人的な感覚としては、Controllerクラスに対するテストで、HTTPリクエスト単位の動作テストになります。
つまり、ルーティング単位でテストクラスを作成し、リクエストからレスポンス迄を検証します。
BrowserTest
名前の通り、ブラウザを使用したテストになります。
Laravel Dusk(ダースク:夕暮れ)という、パッケージを使用し、簡単なブラウザの自動操作/テストAPIを実行します。
このテストの実行には、ChromeDriverという、プログラムのインストールが必要になります。
テストファイルの設置ディレクトリ生成
テストファイルを設置する準備を行います。また、BrowserTestはChromeDriverのDLを実施します。
UnitTest
以下のコマンドにより、UnitTest ファイルを生成します。
※「{MemberTest}」の部分は任意の値にご変更下さい。
1 2 |
> php artisan make:test {MemberTest} --unit Test created successfully. |
これにより、プロジェクトディレクトリの直下に tests->Unitt->MemberTest.php が生成されます。
ファイルの中を覗いて見ると以下の様な記述になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class MemberTest extends TestCase { /** * A basic unit test example. * * @return void */ public function testExample() { $this->assertTrue(true); } } |
FeatureTest
以下のコマンドにより、FeatureTestファイルを生成します。
※「{MemberTest}」の部分は任意の値にご変更下さい。
1 2 |
> php artisan make:test {MemberTest} Test created successfully. |
これにより、プロジェクトディレクトリの直下に tests->Feature->MemberTest.php が生成されます。
ファイルの中を覗いて見ると以下の様になっています。
UnitTestもFeatureTestも、TestCaseを拡張しているのが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Tests\TestCase; class MemberTest extends TestCase { /** * A basic feature test example. * * @return void */ public function testExample() { $response = $this->get('/'); $response->assertStatus(200); } } |
BrowserTest
以下、ChromeDriverのURLから、ご自身のChromeのバージョンに合ったドライバーをDLします。
https://sites.google.com/a/chromium.org/chromedriver/downloads
1.Current Releases からChromeのバージョンに合ったドライバーを選択します
2.OSに合ったドライバーを選択します
3.「chromedriver_win32.zip」がダウンロードされるので解凍してインストール
(現状、Windows環境のx64が存在していませんがx32のドライバでも動作します)
これで、それぞれのテストの準備が整ったので、テストコードを記述していきます。が…
記事が結構、長くなってきたので、各テストについては、それぞれ別記事で記載します。