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

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

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

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

【问题讨论】:

  • 这是 RefreshDatabase 特征的正确行为。考虑为测试环境使用不同的数据库。看看这个post

标签: database laravel testing phpunit


【解决方案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:"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2010-10-06
      • 2011-03-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多