【问题标题】:How can I use both PHPUnit dependency feature and Laravel WithTransactions trait?如何同时使用 PHPUnit 依赖特性和 Laravel WithTransactions 特性?
【发布时间】:2019-08-01 11:48:33
【问题描述】:

在 Laravel 中,有一个名为 DatabaseTransactions 的 trait 可以回滚由测试生成的所有事务,以保持数据库的清洁和隔离。很好用。

但是 PHPUnit 中有一个名为 Test Dependencies 的功能,您可以在其中使用另一个测试的输出:

/**
 * @test
 */
public function a_producer_test()
{
    $user = factory(User::class)->create();

    return $user;
}

/**
 * @test
 * @depends a_producer_test
 */
public function a_consumer_test(User $user)
{
    $id = $user->id;
}

使用DatabaseTransactions 时,不能在a_consumer_test 中使用$user,因为创建用户的事务已回滚,因此$user 为空。如果你从测试类中删除use DatabaseTransactions;,一切正常,你可以使用$user

现在我想在我的a_consumer_test 方法中包含$user,但我想在执行测试后回滚事务并清理我的数据库。我该怎么做?

【问题讨论】:

    标签: testing laravel-5 phpunit


    【解决方案1】:

    您可以使用内存中的 SQLite 数据库,这样您就不必回滚事务。您可以简单地将以下几行添加到您的phpunit.xml 文件中:

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

    只会为测试创建数据库,然后在测试运行后将其销毁。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2020-07-20
      • 2021-08-18
      • 2016-08-28
      • 2015-06-21
      • 1970-01-01
      • 2011-07-22
      • 2016-05-14
      相关资源
      最近更新 更多