Laravelアプリにおけるテストコード〜準備編

本日のお題

本日のお題は、Laravelアプリのテストコードについてです。

目次

専用DBの作成

まずは、テスト専用のDBを作成します。

例えばRailsアプリでDBを作成した場合、"アプリ名"_developmentと"アプリ名"_testという2つのDBが同時に作成されます。

これは、開発環境で保存したレコードがテストに影響を与えないための措置なのですが、Laravelアプリではテスト環境用のDBを自分で用意しなければなりません。

なので、まずはこれを用意します。

----以下、ターミナルでの作業----

mysql -u root

CREATE DATABASE xxxx_test;

あとはshow databasesでDBが作成されていることが確認できればOKです。

phpunit.xmlの修正

次に、phpunit.xmlを編集します。

このファイルはテスト環境に関するさまざまな設定を管理しており、ここを編集することで、テスト環境での接続先のDBを自由に決めることができます。

ファイルの後半部分にある<php>タグで囲まれた部分に、以下の一文を追加します。

<server name="DB_DATABASE" value="xxxx_test"/>

"xxxx_text"の部分には、先ほど作成したDBの名前を入れてください。

これで、テスト環境での接続先DBが設定できました。

.env.testingの作成とマイグレーション

新しいDBに接続はできるようになったのですが、まだマイグレーションが行われていません。

まず、.env.testingというファイルを作成してDB_DATABASE=の部分をテスト用のDBに変更します。

これは、このあと--env=testingオプションをつけてマイグレーションする際の参照先のファイルを作っている作業です。

そして、以下のコマンドでマイグレーションを行います。

php artisan migrate --env=testing

これで、テスト用のDBにテーブルが作られます。

Basic認証の解除

次に、Basic認証を解除します。middlewareを用いたBasic認証を設定しているのですが、そのままにしているとテストが全て失敗してしまいます。

なので、テストコード記述ファイルに以下を記述します。

// クラス定義部分より前に

use Illuminate\Foundation\Testing\WitouhtMiddleWare;

// クラス定義部分の最初に

use WithoutMiddleware;

 

WithoutMiddlewareを用いて、middlewareに設定したBasic認証を無効化しています。

終わりに

とりあえずこれで、テストコードを記述する準備は整いました。

次回以降、本格的にテストを行っていきます。