问题描述
之前,我的 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' => '[email protected]','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 (将#修改为@)