Larravel项目没有数据库的迁移脚本。 “ Illuminate \ Foundation \ Testing \ RefreshDatabase”是否可以处理该问题以及如何处理?

时间:2019-07-03 08:13:50

标签: database laravel phpunit

我继承了一个laravel项目进行维护,并且出于各种无法解释的原因(以前的开发人员已经离开,没有任何联系方式)无法进行数据库迁移。

在我的代码库中,我受命增加测试的代码覆盖率。但是它们之间的测试没有任何隔离,因此,与此[answer] [1]相反,其中一些可能由于这个原因而失败。

为了解决此问题,我找到了laravel本身提供的[solution] [2]:

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;

class ExampleTest extends TestCase
{
    use RefreshDatabase;

    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        // Test something here
    }
}

但是,根据我的理论,有以下问题:

如果没有迁移脚本,这种方法是否可以在没有迁移脚本的情况下工作?

为此,我希望您能删除它。

[1] https://softwareengineering.stackexchange.com/a/394148/249660

[2] https://laravel.com/docs/5.8/database-testing#resetting-the-database-after-each-test

1 个答案:

答案 0 :(得分:0)

RefreshDatabase特性在这种情况下不起作用,因为它在每次测试之前执行php artisan migrate:fresh,但是没有要执行的迁移脚本。

您是否考虑使用Illuminate\Foundation\Testing\DatabaseTransactions特性?这会将每个测试包装在数据库事务中,并可能为您提供足够的隔离。它不使用迁移。

use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    use DatabaseTransactions;

    ...

使用这种方法,当然必须使用创建的所有表来设置测试数据库,并且在添加新表时必须手动更改/迁移测试数据库。