Tenancy 3用PHP Unit测试创建租户出现CreateUsersTable类已存在报错如何解决
修复方案
问题根因
该报错是单元测试进程内迁移类重复加载导致:
单独执行迁移时每个迁移文件仅会被加载一次,不存在类名冲突。但PHPUnit测试是单进程执行,全局测试环境初始化时已经加载过一次迁移类,触发租户创建逻辑时,Tenancy 3 会再次读取
database/migrations/tenant目录下的迁移文件,同名的CreateUsersTable类重复声明就会触发报错。
可落地修复方法
方案1:租户迁移文件新增类存在判断
在所有租户迁移的类声明外层增加判定逻辑,避免重复声明:if (!class_exists('CreateUsersTable')) { class CreateUsersTable extends Migration { // 原有迁移代码保持不变 } }方案2:改用匿名类写法(适配PHP7+环境,更推荐)
直接修改租户目录下的所有迁移文件,将原有具名类替换为Laravel 8+默认的匿名类写法,从根源上消除类名冲突问题:return new class extends Migration { // 原有迁移代码保持不变 };方案3:调整单元测试基类逻辑
在测试基类的租户创建逻辑前,先清空已加载的迁移类映射:// 创建租户前执行 \Illuminate\Support\ClassLoader::clearLoader();
内容的提问来源于stack exchange,提问作者Forbidden
相关产品推荐
相关产品推荐

