我正在尝试在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
。我想将测试迁移放在folder中tests/database/migrations
。
有没有办法让use DatabaseMigrations;
其他文件夹使用迁移?
runDatabaseMigrations
在DatabaseMigrations
运行迁移之前,您可能需要覆盖trait中的方法并从那里设置应用程序的数据库路径。
该runDatabaseMigrations
方法可能最终看起来像这样:
use DatabaseMigrations { runDatabaseMigrations as runMigration; }
public function runDatabaseMigrations()
{
$this->app->useDatabasePath(base_path('tests/database')); //example path
// dump($this->app->databasePath());
$this->runMigration();
}
或者,您可以在boot
AppService提供程序的方法中进行设置:
if (config('app.env') === 'testing') { //Laravel automatically set env to 'testing' when running test
$this->app->useDatabasePath(base_path('tests/database'));
}
迁移将查找“测试/数据库”的子文件夹,称为“迁移”。
PS:如果您在默认
database
文件夹中还有其他代码或文件夹,这将产生副作用。例如,找不到该测试类的工厂类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句