Medium 清新閱讀版
:連結
今天讓我們來看看播種器吧!
播種器 (Seeder) 是 Laravel 提供的一個批次建立測試資料的功能,可以讓我們將建立測試資料的邏輯,統一寫在一個播種器類別中,方便我們重複調用以建立否些特定資料。
建立播種器指令
php artisan make:seeder UserSeeder
database/seeders/UserSeeder.php
<?php
namespace Database\Seeders;
use App\Models\User;
use App\Models\UserLog;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$users = User::factory()
->count(10)
->create();
foreach ($users as $user) {
UserLog::factory()
->count(5)
->create([
'user_id' => $user->id
]);
}
}
}
在以上播種器程式碼中,run()
這個函數便是播種器主要執行的邏輯區塊。我們在這個播種器內,實作了一個使用 Model Factory 批次建立10筆使用者資料的邏輯,同時會對每個使用者資料,各別建立5筆Log資料。
tests/Feature/UserTest.php
<?php
namespace Tests\Feature;
use Database\Seeders\UserSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class UserTest extends TestCase
{
use RefreshDatabase;
public function testUserSeeder()
{
$this->seed(UserSeeder::class);
// 下略
}
public function testUserSeeder2()
{
$this->seed(UserSeeder::class);
// 下略
}
}
在以上的測試程式碼中,我們調用了 UserSeeder
這個播種器來建立資料,當有多個測試案例函數都需要某一群特定資料時,用播種器來建立測試資料,可以避免實作重複的建立測試資料邏輯四散在不同的測試案例函數中。
除了在測試程式碼中調用播種器,也可以用指令的方式進行資料播種:
php artisan db:seed --class=UserSeeder
另外,其實也可以在A播種器調用其他播種器:
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
User::factory()
->count(10)
->create();
foreach ($users as $user) {
UserLog::factory()
->count(5)
->create([
'user_id' => $user->id
]);
}
// 假設有實作另一組播種器 PostSeeder
$this->call([
PostSeeder::class,
]);
}
}
以上就是今天關於播種器的介紹,大家可以多加利用!
明天讓我們來看一下 Mocking 技巧吧!