測試對於Web開發是至關重要的。Laravel模型工廠以一種可預測和容易複製的方式來定義資料庫記錄,這樣你的應用程式的測試是一致和可控的。模型工廠為你的每一個Eloquent模型定義一組預設屬性.
例如,如果你正在做一個部落格應用,允許作者和版主在上線前批准評論,你就需要在部署給使用者之前測試該功能是否正常工作。所有這些都需要測試資料。
要測試上述的部落格應用程式,你需要評論資料來模仿和測試你的應用程式的功能。Laravel允許你通過使用Laravel工廠和Faker來生成假的資料,而不需要從實際使用者那裡獲得評論。
這篇文章解釋瞭如何在沒有真實使用者評論的情況下獲得評論資料。
先決條件
要完成本教程,你必須熟悉以下內容:
- XAMPP
- Composer
XAMPP是一個免費的、易於安裝的Apache發行版,包含PHP、Perl和MariaDB–一個MySQL資料庫。本教程使用最新的版本,即8.1.10,它安裝了PHP 8.1.10。如果為MacOS安裝XAMPP,請閱讀這篇文章,如果為Linux安裝,請閱讀本指南。本教程在Windows上使用XAMPP。
Composer是一個工具,允許你定義、安裝和下載你的Web應用在開發和生產中所依賴的軟體包。本教程使用Composer的v2.4.4版本,需要PHP7.2以上版本。你使用Composer來安裝本教程的Laravel安裝程式。
你也可以下載專案的完整程式碼來進行學習。
如何設定專案
在本節中, 你將建立一個Laravel專案並將其連線到資料庫. 讓我們來看看這一切,以及如何完成它。
安裝Laravel安裝程式
為了快速建立一個Laravel專案, 安裝Laravel安裝程式:
composer global require laravel/installer
這段程式碼會在你的機器上全域性安裝Laravel安裝程式.
建立一個Laravel專案
接下來, 通過執行以下程式建立一個Laravel專案:
laravel new app-name
這段程式碼引導了一個新的Laravel專案,並安裝了所有的依賴項:
建立Laravel專案
另一個更簡單的方法是直接使用Composer來安裝Laravel。
composer create-project laravel/laravel app-name
使用上面的方法時,你不需要安裝Laravel的安裝程式。
啟動應用程式
現在你可以把目錄改成app-name,然後用Laravel自己的命令列介面(CLI)工具Artisan來啟動這個專案:
php artisan serve
這段程式碼開始專案,並將其連線到localhost:8000或任何其他可用的埠,如果8000埠正在使用。在localhost:8000上, 你應該看到像這樣的東西:
Laravel
建立資料庫表格
為了將你的應用程式連線到資料庫,你必須使用XAMPP的PHPMyAdmin圖形使用者介面建立一個新的資料庫。進入localhost/phpmyadmin,在側邊欄上點選New:
建立資料庫
上面的圖片顯示了Create Database表格,app_name是資料庫名稱。
單擊 “Create” 來建立資料庫。
編輯.env檔案
為了將你的應用程式連線到資料庫,你必須編輯.env檔案中的DB部分:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=app_name
DB_USERNAME=root
DB_PASSWORD=
這段程式碼用你的資料庫名稱、使用者名稱、埠、密碼和主機來填充資料庫憑證。你現在可以開始建立工廠和模型了。
注意:用你的資料庫憑證替換這些值。另外,如果你遇到 “Access denied for user” 的錯誤,把 DB_USERNAME
和 DB_PASSWORD
的值放在雙引號中。
如何生成假資料
在建立應用程式並將其連線到資料庫後,你現在可以建立必要的檔案來在資料庫中生成假資料。
建立評論模型
建立模型檔案以與資料庫表進行互動。要建立一個模型,請使用Artisan:
php artisan make:model Comment
這段程式碼在app/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的檔案。
接下來,編輯yyy_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個句子的段落
- 一個只能為真或假的批准值
- 一個在0到9999之間的隨機數
將評論模型連線到CommentFactory
通過在定義上方宣告一個受保護的$ model
變數,將 Comment
模型連線到 CommentFactory
:
protected $model = Comment::class;
同時,在檔案的依賴性中加入 use App\Models\Comment;
。現在CommentFactory檔案應該看起來像這樣:
CommentFactory檔案
如何Seed資料庫
程式設計中的Seed意味著為資料庫生成隨機的假資料,用於測試。
現在你已經建立了模型,執行了遷移,並在CommentFactory中建立了定義,使用DatabaseSeeder檔案執行種子程式。
建立CommentSeeder檔案
建立一個seeder檔案,使用工廠來生成資料:
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檔案應該看起來像這樣:
CommentSeeder檔案
注意:你可以配置Faker來建立本地資料。例如,你可以通過在app/config.php檔案內將 faker_locale
設定為 it_IT
,使其生成義大利語名稱而不是隨機名稱。你可以在本指南中閱讀更多關於Faker Locales的資訊。
執行Seeder
接下來,用Artisan執行seeder檔案:
php artisan db:seed --class=CommentSeeder
這段程式碼執行了seeder檔案,並在資料庫中生成了50行假資料。
資料庫seed成功
現在資料庫應該有50行假資料,你可以用它來測試你的應用程式的功能:
資料庫中的50行資料
如何重置資料庫
當使用生成的資料進行測試時,每次執行測試時都要重置資料庫。假設你想測試批准的評論切換功能。在每次測試後重新整理資料庫,以確保以前生成的資料不會干擾未來的測試。
使用RefreshDatabase
使用test檔案中的 RefreshDatabase
特性來重新整理資料庫。
導航到Test/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測試
現在,檢查資料庫,看到空的評論表:
空的評論資料庫
小結
這篇文章涵蓋了如何建立一個Laravel專案,將其連線到資料庫,並建立和配置模型,遷移,工廠和seeder檔案來生成資料庫的隨機資料。它還討論瞭如何在執行測試後重置資料庫。
現在你已經看到了Laravel工廠和Faker是如何在幾分鐘內輕鬆生成任何數量的測試資料來測試一個應用程式,甚至作為一個佔位符 – 只需最小的配置。
評論留言