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

亨德里克·扬

我正在尝试在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;其他文件夹使用迁移?

Oluwatobi塞缪尔·奥米萨金

runDatabaseMigrationsDatabaseMigrations运行迁移之前,您可能需要覆盖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();
    }

或者,您可以在bootAppService提供程序方法中进行设置

    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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Laravel 5:使用不同的数据库进行测试和本地

如何使用PhpUnit使用Laravel测试服务?

使用PHPUnit在Laravel Controller中进行单元测试

使用PHPUnit进行Laravel测试可以断定正确的顺序

如何在Laravel中使用不同的连接进行批量插入?

如何在Laravel中使用phpunit测试特定的测试类

Laravel-如何在PHPUnit测试中使用faker?

如何使用laravel和phpunit测试文件上传?

如何使用 PHPUnit 在 Laravel 上测试更复杂的案例

如何在Laravel中使用不同的Redis连接

Laravel:phpunit 在运行测试之前不会迁移

Laravel PHPUNIT如何测试查询请求

Laravel使用phpunit + multiprocess测试登录凭证

PHPUnit 测试 Laravel

PHPUnit Laravel:如何对自定义异常处理程序进行单元测试?

使用Laravel,phpunit和Homestead进行身份验证测试失败

使用带有数据库的PHPUnit Laravel 5控制器进行测试(模拟?)

如何在laravel模块中进行迁移?

Laravel 使用外键进行迁移失败

在 Laravel 中加密时如何为不同的用户使用不同的密钥?

如何在 Laravel 中为不同的控制器使用不同的身份验证

如何使用不同的PostgreSQL实例进行生产测试

Laravel:在不同的行中使用不同的 where 条件查询

Laravel PHPUnit测试获取参数

Laravel渴望加载phpunit测试

如何在Laravel中使用不同的值更新前三行

如何在 Laravel 5.8 上使用不同的会话设置默认重定向

如何在laravel 4.1中的控制器中使用不同的名称空间

如何在 Laravel 中使用相同的路由调用不同控制器的方法