运行 Laravel 测试后我的数据库为空

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

每次我运行测试时

php artisan test

当我想查看数据库中插入的数据时,表完全是空的。

这是我的测试

class ExampleTest extends TestCase
{

    use RefreshDatabase;

    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $ad = new Ad();
        $ad->name = 'test';
        $ad->price = 100000;
        $ad->save();
        $this->assertTrue($ad->id > 0);
        var_dump($ad->id);
    }

}

测试验证数据库是否生成好id,每次结果都是正确的。

从我的角度来看,特征 RefreshDatabase 会在每次测试之前刷新数据库,而不是之后……这怎么可能?

注意:我确信我正在检查正确的数据库,因为如果删除

use RefreshDatabase
我可以看到记录。

精度:

如果我使用

RefreshDatabase
代替
DatabaseTransactions
,我可以在运行测试后看到记录。我无法理解它...

laravel phpunit
2个回答
5
投票

我假设您已经在使用

RefreshDatabase

首先要检查的是 phpunit.xml 文件及其数据库设置。它应该是一个内存数据库。

第二件事要检查您是否没有在开发环境中缓存配置。

首次运行

php artisan config:clear
仅一次。然后运行你的测试。

注意:不要缓存本地开发的配置。


0
投票

将此添加到您的

phpunit.xml
文件

<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>

类似这样的:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
         bootstrap="vendor/autoload.php"
         colors="true"
>
    <testsuites>
        <testsuite name="Unit">
            <directory>tests/Unit</directory>
        </testsuite>
        <testsuite name="Feature">
            <directory>tests/Feature</directory>
        </testsuite>
    </testsuites>
    <source>
        <include>
            <directory>app</directory>
        </include>
    </source>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="BCRYPT_ROUNDS" value="4"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="DB_DATABASE" value=":memory:"/>
        <env name="MAIL_MAILER" value="array"/>
        <env name="QUEUE_CONNECTION" value="sync"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="TELESCOPE_ENABLED" value="false"/>
    </php>
</phpunit>
© www.soinside.com 2019 - 2024. All rights reserved.