Laravel phpunit如何使用不同的迁移进行测试

问题描述 投票:0回答:1

我正在尝试在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;使用来自另一个文件夹的迁移?

php laravel phpunit database-migration
1个回答
0
投票

您可能需要在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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.