factoryとは
WEBアプリケーションのテストを行う際にテスト用のデータが必要になりますが、
テストデータ挿入用のSQLファイルを作成するのも時間がかかりますし、大量のデータで試験を行う場合はかなり面倒です。
テスト自体は品質を担保するものなので、時間をかけて行う価値はありますが、テストデータは簡単に作成したい。
Laravelではそういった場合に対応する「ファクトリ」というテスト用のデータを作成する機能がありますので実際に作成していきたいと思います。
記事内で使用するマイグレーションやシーダ、ファクトリーの作成・実行コマンドは以下にまとめています。
参考:【Laravel&Laravel-admin】artisanコマンドまとめ
環境
PHP 7.2.2
Laravel 5.5.44
流れ
①テストデータ日本語化の為の設定
まずは、テストデータの日本語化のための設定を行います。
config/app.phpの末尾に以下を追加します。
1 |
'faker_locale' => 'ja_JP', |
②マイグレーションファイル作成・記述
任意のマイグレーションファイルを作成し、内容を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateRelationTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('test_users', function (Blueprint $table) { $table->increments('id'); $table->String('user_name'); $table->String('gender'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('test_users'); } } |
③ファクトリー作成・記述
モデルも一緒に作成します
1 |
php artisan make:model "Models\TestUser" --factory |
動作を見るために作ったテーブルなのでかなり質素です。
実際に使用するテーブルは様々なカラムが存在すると思います。
以下のサイトでチートシートを作成してくれています。とても参考になりました。
1 2 3 4 5 6 7 8 9 10 |
<?php use Faker\Generator as Faker; $factory->define(App\Models\TestUser::class, function (Faker $faker) { return [ 'user_name' => $faker->name, 'gender' => $faker->randomElement(['男性', '女性']), ]; }); |
⑤シーダーに一行追加
1 |
factory(App\Models\TestUser::class, 5)->create(); |
⑦マイグレーション&シーダー実行
実行前に設定のキャッシュクリアをしないと日本語化が反映されないことがあるのでお忘れなく。
1 2 3 |
php artisan config:clear php artisan migrate:refresh --seed |
正常に実行できていればテストデータが指定したレコード数で作成されているはずです。
参考
使い方:Laravel5.5でほぼ完成されたModelFactoryの使い方