如何解决是否可以使用 Migrating 和 Seed Once 进行 InMemory 测试
之前,我的 profile_id
表中有一个简单的 users
字段。因此,我只需要使用 refreshDatabase
trait 创建一个用户并针对每个用户测试对其进行测试。速度很快。
现在我已经迁移到 Laravel 权限,我已经定义了超过 100 个权限。我必须迁移数据库并为每个测试播种。现在,每个测试最多需要 3 秒,我有 112 个测试,这只是开始。这种方式太慢了。
我尝试在我的 setUp()
方法中使用 MigrateAndSeedOnce 方法:
trait MigrateFreshSeedOnce
{
/**
* If true,setup has run at least once.
* @var boolean
*/
protected static $setUpHasRunOnce = false;
/**
* After the first run of setUp "migrate:fresh --seed"
* @return void
*/
public function setUp() :void
{
parent::setUp();
if (!static::$setUpHasRunOnce) {
Artisan::call('migrate:fresh');
$this->seed('SourceTableSeeder');
$this->seed('RoleTableSeeder');
$this->seed('PermissionTableSeeder');
$this->seed('RepartitionTableSeeder');
$this->company = Company::factory()->create();
$this->operation = Operation::factory()->create(['company_id' => 1]);
$this->user = User::factory()->create(
[
'email' => 'exapmle@company.com','company_id' => 1,'operation_id' => 1,]);
$this->user->assignRole(User::SUPER_ADMIN);
static::$setUpHasRunOnce = true;
}
$this->actingAs($this->user);
}
这对第一个测试很有效,但对于第二个测试,$this->user
为空。
是否可以使用内存数据库执行此操作(这会更快),或者我必须切换到 sqlite DB(更慢),或者有其他更好的选择吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。