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

c8ib6hqw  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(130)

每次我做测试
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,并且每次结果都是正确的。
从我的Angular 来看,RefreshDatabase特性在每次测试之前刷新数据库,而不是在测试之后。这怎么可能呢?
注意:我确信我正在检查正确的数据库,因为如果我删除use RefreshDatabase,我可以看到记录。
精密度:
如果我使用DatabaseTransactions而不是RefreshDatabase,我可以在运行测试后看到记录。我不能让我的头周围...

omhiaaxx

omhiaaxx1#

我假设你已经在使用RefreshDatabase了。
首先要检查的是phpunit.xml文件及其DB设置。它应该是内存数据库。
第二件要检查的事情是,你没有在开发环境中缓存。
php artisan config:clear只运行一次。那就去做测试
注意:不要缓存本地开发的配置。

lnvxswe2

lnvxswe22#

将其添加到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>

相关问题