前回、LaravelでHTTPリクエストのテストをやりました。
しかし、実際のテストではDB関係やWebAPIのテストが多かったりします。
今回は簡易的にDBのテストをやってみます。
演習
1.usersテーブルにサンプルレコードを挿入
2.挿入したサンプルレコードを条件検索
3.サンプルレコードを削除
2.挿入したサンプルレコードを条件検索
3.サンプルレコードを削除
上記の内容のテストを作成して実行してみます。
手順
テストのスケルトンを作成
// 前回の演習で作成してる人はスキップ
php artisan make:test PracticeTest
テストコードの記述
プロジェクト直下のtestsディレクトリ
に PracticeTest.php が作成されるのでテストコードを記述していきます。
:
public function testExample()
{
// レコード新規作成
$user = new \App\User;
$user->name = "手巣戸太郎";
$user->email = "taro@test.com";
$user->password = \Hash::make('test_password');
$user->save();
// SELECT
$readUser = \App\User::where('name','手巣戸太郎')->first();
$this->assertNotNull($readUser); // データが取得できたかテスト
$this->assertTrue(\Hash::check('test_password', $readUser->password));
// レコード削除
\App\User::where('email', 'taro@test.com')->delete();
}
:
解説
平文のパスワードと、DBに保存されているハッシュ化されたパスワードを比較したいときはHash::check()
を使います。
\Hash::cehck( 'test_password', $readUser->password)
テストでは上記のパスワードチェックの返り値をアサーション($this->assertTrue)しています。
PHPUnitの主なAssertメソッドには「assertTrue」「asertFalse」「assertNull($val)」「assertRegExp($pattern,$str)」などあります。
よく使うのは「assertEquals()」で実はこれだけでもなんとかなります。
そして、最後にサンプルレコードを削除します。
実行
$ ./vendor/bin/phpunit tests/PracticeTest.php
上記のように "OK" が表示されていたら、コード自体には問題がないことが確認できます。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。