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

时间:2016-09-08 08:32:35

标签: sqlite laravel-4 phpunit in-memory

[UPDATE]如果我使用查询构建器(即DB :: table()),测试似乎可以在内存中查找,但在使用Eloquent时使用主表。仍然没有提示。

我已经按照这两个教程来使内存测试工作:

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

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

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

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

最近尝试内存测试。需要帮助: 1.不知道为什么我的主要数据库被触及了。 2.如何验证内存中的db是否已填充?有什么方法可以浏览它吗?

遵循的主要步骤:

在app / config / testing / 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']);
    }

1 个答案:

答案 0 :(得分:0)

在每次测试之前运行

function setUp()。如果您检查setUp,则可以看到迁移和种子。如果您在setUp中删除了Artisan::call('db:seed),那么您的数据库将不会在您的课程的每个测试中都没有种子数据。

然后,这是您的新代码:

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