目次
こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
PHPエンジニアとして9年~の経験があります。
ここではLaravelでログイン画面を作り、phpunitの試験を実装するまでの流れを書いています。
※CentOS7 LAMP環境で行っています。
※MariaDB、Laravelそのもののインストール(含むComposer)、Nodejsがインストールされている前提です。
これらのインストール手順はこちらです。
- Hyper-V LAMP環境を構築-2-3.MariaDBとphpMyAdminを入れよう
- Hyper-V LAMP環境を構築-3.Laravelをインストール
- CentOS7に新しいnodejsをインストールする
ログイン画面を作る
公式の「認証」ページに書いてあるコマンドを実行します。
これで基本的なログイン機能ができました!なんて便利なんでしょう…
ログイン画面を表示できます。ログイン処理はまだできません。
データベースとテーブルを作る
画面はできましたが、まだデータベースとの連携ができていません。必要な情報を入力してmigrateします。
データベースのユーザー、パスワード、データベースを作成しておきます。ユーザーのホストは「localhost」(ユーザー名’@’localhost)です。
.envファイルを編集する
laravelの.envファイルを開いて、データベース接続情報を入力します。
設定後、コンソールからmigrateします。
失敗するときはエラーメッセージが出るので、それをよく読んで解決します。大体ユーザー名やパスワードが違ってログインできない、データベースがないなどが多いかと思います。
migrateからユーザー、パスワードを設定する
/database/migrationsに
- 2014_10_12_000000_create_users_table.php
- 2014_10_12_100000_create_password_resets_table.php
- 2019_08_19_000000_create_failed_jobs_table.php
の3ファイルができています。1番目の「2014_10_12_000000_create_users_table.php」を修正します。
up関数の中でテーブルの情報を定義しています。
これを以下のように変更します。
データベースの名前とメールアドレスをchar型にしました。
同時にユーザーテーブルにテストデータを格納するようにしました。
もう一度migrateしてみます。一旦ロールバック(1つ前に戻す)してからmigrateです。
データベースをphpMyAdminなどで確認すると、指定したデータが格納されていることがわかります。
ログインしてみる
いよいよログインしてみます。ログイン画面(/login)にアクセスします。
設定したメールアドレスとパスワードを入れて、ダッシュボードに来たら成功です。
エラーが出た場合
「Access denied for user root@localhost」などと表示されることがあります。ユーザーが.envファイルで指定しているものと異なる場合、変更が反映されていない可能性があります。
この場合、「php artisan serve」でLaravelを再起動、または「php artisan cache:clear」でキャッシュをクリアすると解決します。
ログインテスト(PHP Unit)を書いて実行する
Laravelのコマンドで生成したものを確認するテストを書いてみます。
作ったログイン機能が正常に動作するかを確認する試験を書いてみます。LaravelはPHPUnitが同梱されているので、特別インストールする必要はありません。
テスト用の.env.testingファイルを作成する
実データでテストするよりも、テスト用のデータを使ってテストする方が安全です。万一テストでデータ破壊してしまったら…元に戻せなくなったら…考えたら恐ろしいですね。テスト用のデータベースを使用します。
テスト用のデータベースを作成し、それを指定してテスト実行時はこちらを見るようにします。
phpunit.xmlの<php></php>内にある「server name=”APP_ENV”」のvalueはデフォルトで「testing」になっています。
.envファイルはこれが「.env.testing」を参照します。なければ.envを見ます。
テストファイルの作成
実行すると以下のファイルが「/tests/Feature」内にできます。ここではクラス名をLoginにしてみました。
FeatureとUnitの違い
FeatureはURL単位の一連の動作、unitは関数単位の試験を書いて使い分けるようです。
ログインのテストを書く
一例を載せておきます。ざっと説明すると
- ログイン画面を表示→表示ができること、認証されていないこと
- 直接ダッシュボードにアクセス→ログイン画面へリダイレクト、認証されていないこと
- ログイン処理→処理後、認証されていること
- ログアウト→ログイン後、ログアウト処理が実行されて認証されていないこと
を確認しています。
テストを実行する
laravelプロジェクトフォルダで実行します。
まとめ
今回はLaravelのコマンドから管理画面を作成し、その動作を確認するPHPUnitのテストコードを書きました。
実際のテスト駆動開発の場合はPHPUnitから書いて実装していくことになりますが、今回は「Laravelのコマンドで生成したものを確認するテストを書いてみる」ということで順序が逆になっています。
まずはこうやって動くんだ!という体感を得たいときに、試してみてください(‘ω’)ノ