Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What is going on with this article?
@wantonbe

Laravelアプリで開発テスト - 超準備編 -

More than 1 year has passed since last update.

はじめに

Laravel アプリでの開発テストについて何回かに分けて記事を書いていきたいと思います。(いまのところ4回)

最初の記事はLaravel でテストを書いてみようという超準備編です。公式のマニュアルドキュメントにも載っていますがおさらいも含めてやってみましょう。

前提

  • PHP7.2
  • Laravel5.5(LTS)

プロジェクトをつくる

$ composer create-project --prefer-dist laravel/laravel crud-app "5.5.*"

crud-app というディレクトリができました。Laravel は初期でサンプルのテストコードがあるので早速実行してみましょう。Laravel のテストは PHPUnit をベースにしており、projectをつくったときに一緒にインストールされるので composer コマンドで実行できます。

$ composer exec -v phpunit
> __exec_command: phpunit
PHPUnit 6.5.13 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 159 ms, Memory: 12.00MB

OK (2 tests, 2 assertions)

成功しましたね。どういうテストが走っているのか実際にみてみましょう。Laravel ではテストコードは tests ディレクトリ配下に書いていきます。

tests/
├── CreatesApplication.php
├── Feature
│   └── ExampleTest.php
├── TestCase.php
└── Unit
    └── ExampleTest.php

デフォルトでは Feature と Unit というディレクトリに分かれていて、Feature には機能テスト、Unit にはユニットテストを書く構成になっています。中をみるとFeature は Controller のテスト、 Unit は それ以外のテストという感じになっています。

tests/Feature/ExampleTest.php
<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}
tests/Unit/ExampleTest.php
<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $this->assertTrue(true);
    }
}

開発テストの環境をつくる

公式のドキュメントでは Feature のテストについての記載が多くありますが、昨今のシステムでは役割毎にクラスを分けることが多いと思います。なので今回はデフォルトのディレクトリをバッサリ削除してアプリのディレクトリに合わせて構成していきます。

tests/
├── CreatesApplication.php
├── Http
│   └── Controllers
│       └── ExampleTest.php
└── TestCase.php

tests/Feature にあった ExampleTest.phptests/Http/Controllers の下に移動させました。ファイルを開いて namespace をディレクトリに合わせて変更します。

tests/Http/Controllers/ExampleTest.php
<?php

namespace Tests\Http\Controllers;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

// あとは一緒

構成変えたのでテストを実行してみます。

$ composer exec -v phpunit
> __exec_command: phpunit
PHPUnit 6.5.13 by Sebastian Bergmann and contributors.



Time: 34 ms, Memory: 4.00MB

No tests executed!

No tests executed になってしまいました。Laravelでのテストは tests/Featuretests/Unit にあることが初期で設定されているのでテストがないことになってしまってます。こちらの設定を変更します。

テストの設定は phpunit.xml で設定されています。アプリディレクトリの直下に phpunit.xml があるのでこちらをエディタで開いて testsuites のところを以下のように変更します。

phpunit.xml
    <testsuites>
        <testsuite name="App">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>

この設定にすることで tests ディレクトリ配下にある xxxTest.php というファイルをテストコードとしてみなしてくれるようになります。変更を保存したらまたテストを実行してみます。

$ composer exec -v phpunit
> __exec_command: phpunit
PHPUnit 6.5.13 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 181 ms, Memory: 12.00MB

OK (1 test, 1 assertion)

今度はちゃんと実行されてテストがpassしたことがわかります。これで開発テストをする準備は完了です。

まとめ

  • Laravelは開発テストの環境は初期からある
  • 初期のテストは破棄してアプリのディレクトリ構成をあわせる
  • tests 以下の構成を変えたら phpunit.xml を変更する

次回はDBをつかったテストについて書いていく予定です。

17
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
allabout
その道のプロである専門家(ガイド)を基盤に、総合情報サイトを中心とした様々なサービスをWEB&リアルで展開

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
17
Help us understand the problem. What is going on with this article?