如何使用PHPUnit依赖功能和Laravel WithTransactions特性?

问题描述 投票:0回答:1

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

但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时,你不能在$user中使用a_consumer_test,因为创建用户的事务被回滚,因此$user是空的。如果你从测试类中删除use DatabaseTransactions;,一切正常,你可以使用$user

现在我想在$user方法中使用a_consumer_test,但我想在执行测试后回滚事务并清理我的数据库。我怎样才能做到这一点?

testing laravel-5 phpunit
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.