我正在尝试在Laravel中设置测试,但是我想运行与通常运行的迁移不同的迁移。
我运行以启动数据库的迁移从生产环境中导入数据。对于测试,我想使用另一个名为“ test”的数据库,并且我想用测试数据而不是生产数据填充该测试数据库。
我向使用“测试”数据库的config/database.php
添加了“测试”连接:
'connections' => [
'mysql' => [
'database' => env('DB_DATABASE', 'forge'),
...
],
'testing' => [
'database' => 'test',
...
],
],
并且我将phpunit.xml
设置为使用此“测试”连接:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit ...>
...
<php>
<env name="DB_CONNECTION" value="testing"/>
...
</php>
</phpunit>
现在,我想使用测试数据初始化该“测试”数据库,并使用与默认文件夹不同的文件夹进行迁移。
我可以使用正常的迁移方式:
<?php
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
abstract class TestCase extends BaseTestCase
{
use DatabaseMigrations;
public function setUp(): void
{
parent::setUp();
$this->seed();
}
}
但是这使用默认文件夹database/migrations
。我想将测试迁移放在文件夹tests/database/migrations
中。
是否有办法让use DatabaseMigrations;
使用来自另一个文件夹的迁移?
您可能需要在runDatabaseMigrations
特性中覆盖DatabaseMigrations
方法,并在迁移运行之前从那里设置应用程序的数据库路径。
runDatabaseMigrations
方法可能最终看起来像这样:
use DatabaseMigrations { runDatabaseMigrations as runMigration; }
public function runDatabaseMigrations()
{
$this->app->useDatabasePath(base_path('migrations/testmigrations')); //example path
// dump($this->app->databasePath());
$this->runMigration();
}