Laravel DB Test

Laravel DB Test

Factory と Seeder を使って、テストデータの登録を行います。

Factory

Factory はテストデータを簡単に作成できる機能です。
Facker などを使ってデータをセットすることができます。

artisan コマンドで factory を生成します。

modelオプションでモデル名を一緒に設定できます。

Faker

Faker はテストの為のランダムデータを生成できます。
Faker を使用してテストデータをセットします。

日本語のデータを登録するには locale を変更します。
locale を変更するにはconfig\app.phpを編集します。

Seeder

Seeder はテストデータをいくつも登録する際に簡単に実行することができます。
Factory でセットしたデータを登録していきます。

作成

artisan コマンドで Seeder クラスを作成します。

10ユーザーを登録するようにします。

呼び出し

作成したUsersTableSeederを呼び出すようにします。
DatabaseSeederクラスのrunメソッドに追記します。

リレーションしたデータ登録

ユーザーが投稿した記事へのコメントまでのデータを登録します。
3階層分をデータを登録するようにします。
ユーザー5、1ユーザーの投稿2、1投稿のコメント3を登録します。

実行

  • 事前準備
    Seeder クラスを作成したら事前に Composer のオートローダーを再生成します。
    dump-autoloadコマンドで実行します。

  • 一括で実行
    DatabaseSeederクラスに設定した Seeder を実行します。

  • 個別に実行
    個別に Seeder を実行したい場合はclassオプションで指定します。

  • 削除して実行
    テーブルを全て消してマイグレーションから実行したい場合はmigrate:freshコマンドにseedオプションをつけて実行します。

  • 強制実行
    production 環境でデプロイ時の自動実行などを行いたい場合などのときにforceオプションをつけて実行します。

テスト

ユニットテストやフィーチャーテストが分けられてあります。
原則、ユニットテストでは依存しないテストを行う為PHPUnit\Framework\TestCaseクラス、
フィーチャーテストではフレームワークの機能を使えるように継承したTests\TestCaseクラスを使っていきますが、DBテストを行う為、ユニットテストTests\TestCaseクラスを使っていきます。

ユニットテスト

artisan コマンドでユニットテストのファイルを生成します。

フィーチャーテスト

artisan コマンドでフィーチャーテストのファイルを生成します。

事前準備

config/database.php ファイルにテスト用DBの設定を追加します。

テスト環境として .env.testing ファイルを用意します。
DBをテスト用に修正します。

テストDBのマイグレーションを実行します。

テストDBへ seeder も一緒に実行します。

テストDBのデータ削除を実行します。

アサーション

いくつかアサートメソッドを見てみます。

  • assertDatabaseHas
    データが、テーブルに存在することを検証します。

  • assertDatabaseMissing
    データが、テーブルに含まれないことを検証します。

  • assertDeleted
    レコードが削除されていることを検証します。

  • assertSoftDeleted
    レコードがソフトデリートされていることを検証します。
    論理削除の設定を行っておきます。

  • assertTrue / assertFalse
    結果がオブジェクトか検証します。

  • assertSame
    hidden されたフィールドが一致するかを検証します。

データリセット

RefreshDatabaseトレイトを使うことで、テスト後のデータベースをリセットできます。

Seeder とデータリセットを使ったテスト

Seeder とデータリセットを使ったテストを行います。
setUpメソッドで seeder を実行してデータを登録しておきます。
tearDownメソッドを使ってデータベースをリセットするようにします。

実行

全体で実行

ファイルを指定して実行

グループを指定して実行

参考リンク

Database Testing
Laravel 6.x データベースのテスト

Eloquent: Relationships
Laravel 6.x Eloquent:リレーション

Database: Seeding
Laravel 6.x データベース:シーディング

Testing: Getting Started
Laravel 6.x テスト: テストの準備

Faker(github)

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA