我正在内存中构建数据库测试,我需要在运行测试之前运行迁移 问题是我在一个微服务中进行测试并在另一个微服务中进行迁移 所以我需要类似的东西:
class MyTest extends TestCase
{
use RefreshDatabase;
public function setUp(): void
{
parent::setUp();
$path = str_replace('api', 'admin', base_path()) . '/database/migrations/';
Artisan::call('migrate', ['--path' => $path]);
}
public functions myFunction()
{
}
}
我尝试跑步:
$path = str_replace('api', 'admin', base_path()) . '/database/migrations/';
echo PHP_EOL . $path . PHP_EOL;
Artisan::call('migrate', ['--path' => $path]);
其中“api”是一个项目,“admin”是另一个项目
但是没有成功。迁移路径的其他一些组合也没有成功 我的电脑上有两个服务在 vagrant 中运行并且工作正常 我只是找不到一种方法来构建一个命令来调用从一个服务到另一个服务的迁移 那么...我该怎么做呢?也许我错过了什么?
当您的项目被分为几个 Laravel 微服务并且迁移留在其中一个微服务但您在另一个微服务中进行测试时,您几乎没有什么选择:
符号链接。是的。只需创建一个符号链接即可从一个子项目迁移到另一个子项目。我们在实践中并没有真正使用它,但这可能是一种方法
我们所做的解决方案:只需创建一个不在内存中的单独数据库(它有用吗?),使用一次命令:
php artisan migrate --database=db_for_test_name
在数据库测试中,我们使用 DatabaseTransactions 在测试之前锁定测试数据库的状态,并在测试工作后将其恢复。 它将帮助您将迁移历史记录保存在迁移表中,并在有新迁移时重新运行上面的命令