【问题标题】:My database is empty after running my laravel tests运行我的 laravel 测试后,我的数据库为空
【发布时间】:2021-05-16 04:39:15
【问题描述】:

每次我运行我的测试时

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 我可以在运行测试后看到记录。我无法理解它......

【问题讨论】:

  • 预计RefreshDatabase 会清除数据库,因此测试不会相互影响。
  • @SuperDJ 是的,我的整个套件中只有一种测试方法,所以我必须能够看到数据库中的记录..
  • 你对数据库何时刷新的理解有误,每次测试清库after
  • 哦,你是对的。我现在感觉有点不舒服..但是这种行为真的很奇怪,例如在测试失败后能够读取以记录在数据库中通常非常有用..
  • 断言失败的结果应该让您很好地了解问题所在。可能需要使您的测试/断言更具表现力。

标签: laravel phpunit


【解决方案1】:

我假设您已经在使用RefreshDatabase

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-08
    • 2017-06-23
    • 2018-08-09
    • 2012-05-09
    • 2023-03-28
    • 1970-01-01
    • 2011-06-14
    • 2017-04-02
    相关资源
    最近更新 更多