【发布时间】:2021-12-08 08:19:12
【问题描述】:
我正在为多租户 Laravel 8 应用程序使用 Stancl Tenancy。我在单核中进行了很好的测试,但是我想利用 run tests in parallel 的新功能。
我认为明智地这样做我应该为并行化创建的每个数据库创建一个新租户。我一直在尝试使用 ParallelTesting::setUpTestDatabase 回调来做到这一点,但我遇到了一些奇怪的行为。
当我继续并行运行测试时,只有 7 个数据库中的 5 个(并且始终是这个)为它创建了一个租户:
AppServiceProvider
ParallelTesting::setUpTestDatabase(function ($database, $token) {
$tenant = Tenant::create(['id'=>"testTenant$token",'name'=>"PHPUnit Process $token"]);
});
无需调用创建模型,即可正确设置数据库:
ParallelTesting::setUpTestDatabase(function ($database, $token) {
//$tenant = Tenant::create(['id'=>"testTenant$token",'name'=>"PHPUnit Process $token"]);
Log::info("Setup called by $token My database connection is ".DB::connection()->getDatabaseName());
});
[2021-10-21 14:45:32] testing.INFO: Setup called by 4 My database connection is project_test_4
[2021-10-21 14:45:32] testing.INFO: Setup called by 3 My database connection is project_test_3
[2021-10-21 14:45:32] testing.INFO: Setup called by 7 My database connection is project_test_7
[2021-10-21 14:45:32] testing.INFO: Setup called by 6 My database connection is project_test_6
[2021-10-21 14:45:34] testing.INFO: Setup called by 5 My database connection is project_test_5
创建模型的行未注释,没有任何记录,只有最后一个连接 5 获得为其创建的租户。随后的测试似乎使用了正确的连接,因为其中 4/5 的 TenantNotIdentified 测试失败(因为它们没有租户或域)。
谁能发现问题?
【问题讨论】:
-
将错误直接转储到控制台后,静默失败是由于尝试添加租户时数据库尚未迁移造成的。