`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` 删除所有表的主要内容,如果未能解决你的问题,请参考以下文章