iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0

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 技巧吧!

參考資料


上一篇
setUp()、tearDown()、Data Provider
下一篇
Mocking(一)
系列文
自動化測試大作戰31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言