我想在进行某些测试之前创建一些实体。目前我是这样的:
class MyUnitTest extends TestCase {
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();
$this->artisan('db:seed');
// ...
}
// ...
}
设置后,我在每个测试功能中创建特定于测试的实体,并将其保留在那里。
它有效,但似乎不正确。测试用例取决于我的db:seed
,它创建的实体比特定测试用例所需的要多得多。
在每次测试之前,推荐的种子数据库播种方法是什么?当我编写测试时,在哪里可以找到一些可以遵循的示例/模式?
我将使用工厂类来创建测试所需的特定编号,例如
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
}
您可以在测试中使用$this->seed();
运行DatabaseSeeder或$this->seed(UserTableSeeder::class);
运行特定的播种器
在documentation中了解更多。
如果您认为播种机创建的数据超出了每个测试所需的数据,那么我建议您不要使用播种机。这是单元测试,所以为什么要依靠播种机?
只需创建每个测试所需的数据。您可以从Jeffrey Way here中看到示例。
使用php artisan修补匠播种您的数据库