Laravelで単体テスト(HTTPリクエスト編)

2019/11/12

PHPUnitとは、PHPのテスティングツールで、PHPの単体テストを行うときにはよく利用されます。

Laravelは標準でPHPUnitが実装されているので、何もしなくても最初から使えるようになっています。(※composer.jsonにすでに記述されています。)

今回はこのPHPUnitを使ってLaravelで単体テストを行ってみます。

 

演習

まずは、Laravelでの単体テストがどんなものか、感覚を知るために簡単なテスト内容を実行してみます。

今回のテスト内容はHTTPリクエストを送り、結果をテストするだけのテストを実行します。

 

手順

 

Artisanコマンドでスケルトンの作成

artisanコマンドでテストファイルのスケルトンを作成します。


php artisan make:test PracticeTest

 

解説
テストファイルの場所

Laravelでのテストファイルの場所はプロジェクト直下にあるtestsディレクトリに置きます。先ほどのArtisanコマンドを打つと、このディレクトリにテストファイルが自動生成されます。

 

テストファイルの命名規則

アッパーキャメルケースでファイル名をつけます。

 

コーディング

artisanコマンドで自動生成されたテストファイルにテストしたい内容をコーディングします。


public function testExample()
{
    $response = $this->call('GET','/');
    $this->assertEquals(200, $response->getStatusCode());
}

 

解説
$this->call

Laravelではユニットテストの中でルートを呼び出すのは簡単で、callメソッドを使用します。


// 構文
$response = $this->call($method , $uri , $parameters , $files , $server , $content);
// 実例
$response = $this->call('GET', 'user/profile');

 

$this->call()で呼び出されるresponseオブジェクトのメソッドは「getStatusCode()」「getContent()」「getData()」などあります。

 

assertEquals

PHPUnitには $this->assert~~ という名前のメソッドが多数存在し、いろいろなテストができるようになっています。

assertEquals は PHPUnit で使われるAssertメソッドの一つです。

第一引数と第二引数が等しいかどうかをチェックします。

その他のAssertメソッドは以下をご覧ください。

PHPUnitの主なAssertメソッド一覧

 
LaravelからもPHPUnitテスト用に数多くの追加アサートメソッドを提供しています。

Laravel 5.dev テスト

 
Laravel5.5以上からはLaravelで提供しているアサートメソッドがさらに数多く追加されました。

今回のケースではassertStatusメソッドが使えそうですね。

Laravel 5.5 HTTPテスト

 

実行

実行はコマンドプロンプト/ターミナルで行います。


./vendor/bin/phpunit tests/PracticeTest.php

 
実際のテストではWebAPIのテストやDBのテストが多いかなと思います。

今回は簡単なテストを実行しましたが、まずはPHPUnitとはどんなものかを理解できたらOKかなと思います。

以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識