在使用Laravel Doctrine进行的每次测试之前,推荐的种子数据库播种方式是什么?

问题描述 投票:0回答:4

我想在进行某些测试之前创建一些实体。目前我是这样的:

class MyUnitTest extends TestCase {

    use RefreshDatabase;

    protected function setUp(): void
    {
        parent::setUp();

        $this->artisan('db:seed');

        // ...

    }

    // ...

}

设置后,我在每个测试功能中创建特定于测试的实体,并将其保留在那里。

它有效,但似乎不正确。测试用例取决于我的db:seed,它创建的实体比特定测试用例所需的要多得多。

在每次测试之前,推荐的种子数据库播种方法是什么?当我编写测试时,在哪里可以找到一些可以遵循的示例/模式?

php laravel symfony doctrine phpunit
4个回答
0
投票

我将使用工厂类来创建测试所需的特定编号,例如

protected function setUp(): void
{
   parent::setUp();
   // Add user
   factory(User::class)->create([
     'first_name' => 'Steve',
     'last_name' => 'Rogers',
     'email' => '[email protected]',
     'password' => Hash::make('CaptainAmerica@1'),
     'merchant_id' => '1',
   ]);

  factory(User::class, 5)->create(); // specific number
}

0
投票

您可以在测试中使用$this->seed();运行DatabaseSeeder或$this->seed(UserTableSeeder::class);运行特定的播种器

documentation中了解更多。


0
投票

如果您认为播种机创建的数据超出了每个测试所需的数据,那么我建议您不要使用播种机。这是单元测试,所以为什么要依靠播种机?

只需创建每个测试所需的数据。您可以从Jeffrey Way here中看到示例。


-1
投票

使用php artisan修补匠播种您的数据库

© www.soinside.com 2019 - 2024. All rights reserved.