在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
,但是我想回滚事务并在执行测试后清理数据库。我该怎么办?
答案 0 :(得分:0)
您可以使用内存中的SQLite数据库,这样就不必回滚事务。您可以简单地将以下几行添加到您的phpunit.xml
文件中:
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
只为测试创建数据库,然后在测试运行后将其销毁。