为什么是Laravel PHPUnit在内存测试播种我的主数据库



[UPDATE]测试似乎可以在内存中找到,如果我使用查询生成器(即DB::table()),但在使用Eloquent时使用主表。

我遵循以下2个教程来进行内存测试:

testing-like-a-boss-in-laravel-models

laravel-setting-up-an-in-memory-test-database

我首先尝试迁移/播种一个表,不存在于我的主mysql数据库。一切都很好,表没有在mysql中创建,测试断言成功。

然后我尝试用一个真实的表迁移/播种/内存测试,发现它在我的主mysql数据库中播种。

新尝试的内存测试。需要帮助吗?1. 不知道为什么我的主数据库被碰了。2. 如何验证内存中的db是否已填充?有办法浏览一下吗?

主要步骤如下:

在app/config/测试/database.php

'default' => 'testing',
'testing' => array(
            'driver'   => 'sqlite',
            'database' => ':memory:',
            'prefix'   => '',
        )

在phpunit.xml中添加:

<php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="DB_CONNECTION" value="testing"/>
    </php>
TestCase类中的

:

public function createApplication()
    {
        $unitTesting = true;
        $testEnvironment = 'testing';
        return require __DIR__.'/../../bootstrap/start.php';
    }

在我的测试类:

public function setUp()
    {
        parent::setUp();
        Artisan::call('migrate');
        Artisan::call('db:seed', ['--class' => 'DatabaseSeeder', '--database' => 'testing']);
    }

function setUp()在每次测试之前运行。如果你检查你的setUp,你可以看到一个迁移和一个种子。如果你在你的设置中删除Artisan::call('db:seed),你的数据库将在你的类的每次测试中没有种子数据。

然后,这是你的新代码:

public function setUp()
{
    parent::setUp();
    Artisan::call('migrate');
    // Artisan::call('db:seed', ['--class' => 'DatabaseSeeder', '--database' => 'testing']);
}

最新更新