如何使用 Laravel 模型工廠生成和使用假記錄
已發表: 2023-04-28測試對於 Web 開發至關重要。 Laravel 模型工廠以可預測且易於復制的方式定義數據庫記錄,以便您的應用程序測試保持一致和可控。 模型工廠為每個 Eloquent 模型定義了一組默認屬性。
例如,如果您正在製作一個允許作者和版主在評論上線前批准評論的博客應用程序,您需要在將其部署給用戶之前測試該功能是否正常工作。 這一切都需要測試數據。
要測試上述博客應用程序,您需要評論數據來模擬和測試您的應用程序的功能。 Laravel 允許您通過使用 Laravel 工廠和 Faker 來生成虛假數據,而無需從實際用戶那裡獲得評論。
本文介紹如何在沒有真實用戶評論的情況下獲取評論數據。
先決條件
要完成本教程,您必須熟悉以下內容:
- XAMPP
- 作曲家
XAMPP 是一種免費且易於安裝的 Apache 發行版,其中包含 PHP、Perl 和 MariaDB(一種 MySQL 數據庫)。 本教程使用最新版本 8.1.10,它安裝 PHP 8.1.10。 如果為 MacOS 安裝 XAMPP 或為 Linux 安裝本指南,請閱讀這篇文章。 本教程在 Windows 上使用 XAMPP。
Composer 是一種工具,允許您定義、安裝和下載您的 Web 應用程序在開發和生產中所依賴的包。 本教程使用 Composer v2.4.4 版本,需要 PHP 7.2+ 版本。 您使用 Composer 為本教程安裝 Laravel 安裝程序。
您還可以下載該項目的完整代碼以進行後續操作。
方法如何設置項目
在本節中,您將創建一個 Laravel 項目並將其連接到數據庫。 讓我們來看看所有需要以及如何完成它。
安裝 Laravel 安裝程序
要快速創建 Laravel 項目,請安裝 Laravel 安裝程序:
composer global require laravel/installer
此代碼在您的計算機上全局安裝 Laravel 安裝程序。
創建 Laravel 項目
接下來,通過運行以下命令創建一個 Laravel 項目:
laravel new app-name
此代碼引導一個新的 Laravel 項目並安裝所有依賴項:
安裝 Laravel 的另一種更簡單的方法是直接使用 Composer。
composer create-project laravel/laravel app-name
使用上述方法時不需要安裝 Laravel 安裝程序。
啟動應用程序
您現在可以將目錄更改為app-name並使用 Laravel 自己的命令行界面 (CLI) 工具 Artisan 啟動項目:
php artisan serve
此代碼啟動項目並將其連接到 localhost:8000 或任何其他可用端口(如果正在使用端口 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
此代碼使用一些樣板代碼在app/M models文件夾中創建一個Comment.php文件。 在use HasFactory;
線:
protected $fillable = [ 'name', 'email', 'body', 'approved', 'likes' ];
此代碼列出了您希望允許批量分配的字段,因為 Laravel 默認保護您的數據庫免受批量分配。 Comment模型文件現在應該如下所示:
創建遷移文件
創建模型文件並聲明$fillable
數組後,您必須使用以下命令創建遷移文件:
php artisan make:migration create_comments_table
注意:在 Laravel 中創建遷移的命名約定通常是snake_case
,也稱為underscore_case
。 第一個詞是動作,第二個詞是模型的複數形式,最後一個詞是在項目中創建的特性。 這意味著您將在為 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 文件
創建一個使用工廠生成數據的種子文件:
php artisan make:seeder CommentSeeder.php
此代碼在database/seeders文件夾中創建一個CommentSeeder .php文件。
編輯運行函數
將 Comment 模型連接到 CommentSeeder。 在運行函數中添加以下代碼:
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
特徵刷新數據庫。
導航到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 Factories 和 Faker 如何在幾分鐘內輕鬆生成任意數量的測試數據來測試應用程序,甚至作為佔位符——只需最少的配置。
當您的 Laravel 應用程序準備好部署時,您可以在 Kinsta 的應用程序託管服務上快速高效地進行部署。