Laravel Model Factory で偽のレコードを生成して使用する方法
公開: 2023-04-28テストは Web 開発に不可欠です。 Laravel モデル ファクトリは、予測可能で簡単に複製可能な方法でデータベース レコードを定義するため、アプリのテストは一貫性があり、制御されます。 モデル ファクトリは、Eloquent モデルごとに一連のデフォルト属性を定義します。
たとえば、作成者とモデレーターがコメントを公開前に承認できるようにするブログ アプリを作成している場合、ユーザーに展開する前に、機能が適切に機能するかどうかをテストする必要があります。 これにはすべてテストデータが必要です。
上記のブログ アプリをテストするには、アプリケーションの機能を模倣してテストするためのコメント データが必要です。 Laravel では、Laravel ファクトリと Faker を使用して偽のデータを生成することで、実際のユーザーからコメントを得ることなくそれを行うことができます。
この記事では、実際のユーザーからコメントなしでコメント データを取得する方法について説明します。
前提条件
このチュートリアルを完了するには、次のことを理解している必要があります。
- XAMPP
- 作曲
XAMPP は無料でインストールが簡単な Apache ディストリビューションで、PHP、Perl、MariaDB (MySQL データベース) が含まれています。 このチュートリアルでは、PHP 8.1.10 をインストールする最新バージョンの 8.1.10 を使用します。 MacOS に XAMPP をインストールする場合はこの記事を、Linux の場合はこのガイドをお読みください。 このチュートリアルでは、Windows で XAMPP を使用します。
Composer は、Web アプリが開発および本番環境で依存するパッケージを定義、インストール、およびダウンロードできるツールです。 このチュートリアルでは、バージョン v2.4.4 の Composer を使用します。これには、PHP バージョン 7.2 以降が必要です。 Composer を使用して、このチュートリアルの Laravel インストーラーをインストールします。
プロジェクトの完全なコードをダウンロードして、フォローすることもできます。
プロジェクトの設定方法
このセクションでは、Laravel プロジェクトを作成してデータベースに接続します。 必要なすべてのことと、それを達成する方法を見てみましょう。
Laravel インストーラーのインストール
Laravel プロジェクトをすばやく作成するには、Laravel インストーラーをインストールします。
composer global require laravel/installer
このコードは、Laravel インストーラーをマシンにグローバルにインストールします。
Laravel プロジェクトを作成する
次に、以下を実行して Laravel プロジェクトを作成します。
laravel new app-name
このコードは、新しい Laravel プロジェクトをブートストラップし、すべての依存関係をインストールします。
Laravel をインストールするもう 1 つの簡単な方法は、Composer を直接使用することです。
composer create-project laravel/laravel app-name
上記の方法を使用する場合、Laravel インストーラーをインストールする必要はありません。
アプリを起動
ディレクトリをapp-nameに変更し、Laravel 独自のコマンドライン インターフェイス (CLI) ツールである Artisan を使用してプロジェクトを開始できます。
php artisan serve
このコードはプロジェクトを開始し、ポート 8000 が使用されている場合は、localhost:8000 またはその他の利用可能なポートに接続します。 localhost:8000 では、次のように表示されます。
データベースを作成する
アプリをデータベースに接続するには、XAMPP の PHPMyAdmin グラフィカル ユーザー インターフェイスを使用して新しいデータベースを作成する必要があります。 localhost/phpmyadminに移動し、サイドバーの[新規]をクリックします。
上の画像は、データベース名としてapp_nameを使用した[データベースの作成]フォームを示しています。
[作成]をクリックしてデータベースを作成します。
.env ファイルを編集する
アプリをデータベースに接続するには、 .envファイルの DB 部分を編集する必要があります。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=app_name DB_USERNAME=root DB_PASSWORD=
このコードは、データベースの資格情報にデータベース名、ユーザー名、ポート、パスワード、およびホストを入力します。 これで、ファクトリとモデルの作成を開始する準備が整いました。
注:値をデータベース資格情報に置き換えます。 また、「ユーザーのアクセスが拒否されました」というエラーが発生した場合は、 DB_USERNAME
とDB_PASSWORD
の値を二重引用符で囲みます。
偽のデータを生成する方法
アプリを作成してデータベースに接続したら、データベースに偽のデータを生成するために必要なファイルを作成できます。
コメント モデルを作成する
データベース テーブルと対話するモデル ファイルを作成します。 モデルを作成するには、Artisan を使用します。
php artisan make:model Comment
このコードは、いくつかのボイラープレート コードを含むComment.phpファイルをapp/Modelsフォルダー内に作成します。 次のコードをuse HasFactory;
の下に追加します。 ライン:
protected $fillable = [ 'name', 'email', 'body', 'approved', 'likes' ];
このコードは、Laravel がデフォルトでデータベースを一括割り当てから保護するため、一括割り当てを許可するフィールドをリストします。 Commentモデル ファイルは次のようになります。
移行ファイルを作成する
モデル ファイルを作成して$fillable
配列を宣言したら、次のコマンドを使用して移行ファイルを作成する必要があります。
php artisan make:migration create_comments_table
注: Laravel でマイグレーションを作成するための命名規則は通常、 underscore_case
とも呼ばれるsnake_case
です。 最初の単語はアクション、2 番目の単語はモデルの複数形、最後の単語はプロジェクト内で作成される機能です。 これは、Book モデルの移行を作成するときにcreate_books_table
を記述することを意味します。
このコードは、database/migrationsフォルダー内にyyyy_mm_dd_hhmmss_create_comments_tableという名前のファイルを作成します。
次に、 yyyy_mm_dd_hhmmss_create_comments_table内の up 関数を編集します。
public function up() { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->longText('body'); $table->boolean('approved'); $table->integer('likes')->default(0); $table->timestamps(); }); }
このコードは、列を持つテーブルを作成するスキーマを作成します: id
、 name
、 email
、 body
、 approved
、 likes
、およびtimestamps
。
移行を実行する
移行ファイルを作成および編集しても、コマンド ラインを使用して実行するまでは何も起こりません。 データベース マネージャーを見ると、まだ空です。
Artisan を使用して移行を実行します。
php artisan migrate
このコマンドは、アプリを作成してからの最初の移行であるため、 database/migrations内のすべての移行を実行します。
次の図は、実行したすべての移行ファイルを示しています。 それぞれがデータベース内のテーブルを表します。
CommentFactory ファイルを作成する
定義関数を含むファクトリ ファイルを作成します。 このデモでは、Artisan を使用してファクトリを作成します。
php artisan make:factory CommentFactory.php
このコードは、 database/factoriesフォルダー内にCommentFactory .phpファイルを作成します。
定義関数
CommentFactory内の関数は、Faker が偽のデータを生成する方法を定義します。 次のように編集します。
public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->email(), 'body' => $this->faker->sentence(45), 'approved' => $this->faker->boolean(), 'likes' => $this->faker->randomNumber(5) ]; }
このコードは、Faker に以下を生成するように指示します。
- 名前
- メールアドレス
- 45 文を含む段落
- true または false のみの承認済みの値
- 0 から 9999 までの乱数
コメント モデルを CommentFactory に接続する
定義の上に保護された$model
変数を宣言して、 Comment
モデルをCommentFactory
にリンクします。
protected $model = Comment::class;
また、 use App\Models\Comment;
を追加します。 ファイルの依存関係に。 CommentFactoryファイルは次のようになります。
データベースをシードする方法
プログラミングにおけるシードとは、テスト目的でデータベース用にランダムな偽のデータを生成することを意味します。
モデルを作成し、移行を実行し、CommentFactory 内に定義を作成したので、 DatabaseSeederファイルを使用してシーダーを実行します。
CommentSeeder ファイルを作成する
factory を使用してデータを生成するシーダーファイルを作成します。
php artisan make:seeder CommentSeeder.php
このコードは、 database/seedersフォルダー内にCommentSeeder .phpファイルを作成します。
実行機能を編集する
Comment モデルを CommentSeeder に接続します。 run 関数内に次のコードを追加します。
Comment::factory()->count(50)->create();
このコードは、CommentSeeder に、Comment モデルと CommentFactory の定義関数を使用して、データベース内に 50 個のコメントを生成するように指示します。 また、 use App\Models\Comment;
を追加します。 ファイルの依存関係に。 CommentSeederファイルは次のようになります。
注:ローカル データを作成するように Faker を構成できます。 たとえば、 app/config.phpファイル内のfaker_locale
it_IT
に設定することで、ランダムな名前ではなくイタリア語の名前を生成するように設定できます。 Faker Locales の詳細については、このガイドを参照してください。
シーダーを実行する
次に Artisan でシーダーファイルを実行します。
php artisan db:seed --class=CommentSeeder
このコードは、シーダーファイルを実行し、データベースに 50 行の偽のデータを生成します。
データベースには、アプリケーションの機能をテストするために使用できる偽のデータが 50 行あるはずです。
データベースをリセットする方法
生成されたデータをテストに使用する場合は、テストを実行するたびにデータベースをリセットします。 承認されたコメントのトグル機能をテストしたいとします。 各テストの後にデータベースを更新して、以前に生成されたデータが将来のテストに干渉しないようにします。
RefreshDatabase を使用する
テストファイル内のRefreshDatabase
トレイトを使用してデータベースを更新します。
tests/Featureフォルダー内のExampleTest.phpに移動して、コメントuse Illuminate\Foundation\Testing\RefreshDatabase;
test_the_application_returns_a_successful_response
関数の上に次のコード行を追加します。
use RefreshDatabase;
ExampleTest.phpファイルは次のようになります。
テストを実行する
RefreshDatabase
トレイトをテスト ファイルに追加した後、Artisan を使用してテストを実行します。
php artisan test
以下の画像に示すように、このコードはアプリ内のすべてのテストを実行し、テスト後にデータベースを更新します。
ここで、データベースをチェックして、空のコメント テーブルを確認します。
まとめ
この記事では、Laravel プロジェクトを作成し、それをデータベースに接続し、モデル、移行、ファクトリ、およびシーダー ファイルを作成および構成して、データベースのランダム データを生成する方法について説明しました。 また、テストの実行後にデータベースをリセットする方法についても説明しました。
Laravel Factory と Faker を使用すると、最小限の構成で、アプリケーションをテストするため、またはプレースホルダーとしても、数分で任意の量のテスト データを簡単に生成できることがわかりました。
Laravel アプリを展開する準備ができたら、Kinsta のアプリケーション ホスティング サービスで迅速かつ効率的に展開できます。