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 プロジェクトをすばやく作成するには、Laravel インストーラーをインストールします。

 composer global require laravel/installer

このコードは、Laravel インストーラーをマシンにグローバルにインストールします。

Laravel プロジェクトを作成する

次に、以下を実行して Laravel プロジェクトを作成します。

 laravel new app-name

このコードは、新しい Laravel プロジェクトをブートストラップし、すべての依存関係をインストールします。

Laravel プロジェクトの作成
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 では、次のように表示されます。

Laravel Web サイトのホームページ
ララベル

データベースを作成する

アプリをデータベースに接続するには、XAMPP の PHPMyAdmin グラフィカル ユーザー インターフェイスを使用して新しいデータベースを作成する必要があります。 localhost/phpmyadminに移動し、サイドバーの[新規]をクリックします。

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_USERNAMEDB_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(); }); }

このコードは、列を持つテーブルを作成するスキーマを作成します: idnameemailbodyapprovedlikes 、および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 ファイル
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ファイルは次のようになります。

CommentSeeder ファイル
CommentSeeder ファイル

注:ローカル データを作成するように Faker を構成できます。 たとえば、 app/config.phpファイル内のfaker_locale it_ITに設定することで、ランダムな名前ではなくイタリア語の名前を生成するように設定できます。 Faker Locales の詳細については、このガイドを参照してください。

シーダーを実行する

次に Artisan でシーダーファイルを実行します。

 php artisan db:seed --class=CommentSeeder

このコードは、シーダーファイルを実行し、データベースに 50 行の偽のデータを生成します。

データベースのシードが成功しました
データベースのシードが成功しました

データベースには、アプリケーションの機能をテストするために使用できる偽のデータが 50 行あるはずです。

データベース内の 50 行のデータ
データベース内の 50 行のデータ

データベースをリセットする方法

生成されたデータをテストに使用する場合は、テストを実行するたびにデータベースをリセットします。 承認されたコメントのトグル機能をテストしたいとします。 各テストの後にデータベースを更新して、以前に生成されたデータが将来のテストに干渉しないようにします。

RefreshDatabase を使用する

テストファイル内のRefreshDatabaseトレイトを使用してデータベースを更新します。

tests/Featureフォルダー内のExampleTest.phpに移動して、コメントuse Illuminate\Foundation\Testing\RefreshDatabase; test_the_application_returns_a_successful_response関数の上に次のコード行を追加します。

 use RefreshDatabase;

ExampleTest.phpファイルは次のようになります。

ExampleTest ファイル
例テストファイル

テストを実行する

RefreshDatabaseトレイトをテスト ファイルに追加した後、Artisan を使用してテストを実行します。

 php artisan test

以下の画像に示すように、このコードはアプリ内のすべてのテストを実行し、テスト後にデータベースを更新します。

Artisan テストの成功
Artisan テストの成功

ここで、データベースをチェックして、空のコメント テーブルを確認します。

空のコメント データベース
空のコメント データベース
手作業によるデータ入力は過去のものです。 Laravel Model Factory でアプリのテストを自動化します。 ここから始めましょう! クリックしてツイート

まとめ

この記事では、Laravel プロジェクトを作成し、それをデータベースに接続し、モデル、移行、ファクトリ、およびシーダー ファイルを作成および構成して、データベースのランダム データを生成する方法について説明しました。 また、テストの実行後にデータベースをリセットする方法についても説明しました。

Laravel Factory と Faker を使用すると、最小限の構成で、アプリケーションをテストするため、またはプレースホルダーとしても、数分で任意の量のテスト データを簡単に生成できることがわかりました。

Laravel アプリを展開する準備ができたら、Kinsta のアプリケーション ホスティング サービスで迅速かつ効率的に展開できます。