`RefreshDatabase` 删除所有表

Posted

技术标签:

【中文标题】`RefreshDatabase` 删除所有表【英文标题】:`RefreshDatabase` drops all tables 【发布时间】:2019-11-20 07:13:00 【问题描述】:

在一个 Laravel/phpunit 测试类中,我将 use RefreshDatabase 添加到该类中,我知道这应该可以使测试期间对数据库的更改在测试完成时恢复。

但是每当我在课堂上运行测试时,数据库中的所有表都会被删除,并且测试会失败(因为表不存在!)。

文档建议让数据库在测试后恢复就像我一样简单地添加一行,我错过了什么吗?

【问题讨论】:

这是 RefreshDatabase 特征的正确行为。考虑为测试环境使用不同的数据库。看看这个post 【参考方案1】:

如果您不想使用 RefreshDatabase 擦除和重建数据库,您可以简单地使用 DatabaseTransactions 特征。这将回滚测试期间所做的任何更改。

<?php

namespace Tests\Unit;

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

class ExampleTest extends TestCase

    use DatabaseTransactions;

    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    
        $this->assertTrue(true);
    

【讨论】:

【参考方案2】:

更新您的phpunit.xml 并添加这两行

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

【讨论】:

以上是关于`RefreshDatabase` 删除所有表的主要内容,如果未能解决你的问题,请参考以下文章

DataTables 循环遍历表并删除特定列中包含特定字符串的所有行

更新da表a表

双向链表实现

双向链表实现

双向链表实现

oracle中如何删除所有表