我一直在自学如何在Laravel 5.5中编写测试用例。
我注意到,当我运行一个具有DatabaseMigrations
特征的测试类时,在运行测试后,所有与该测试类相关的DB表都将被删除。
默认情况下会发生这种情况吗?我尚未在文档中找到任何线索。
任何建议将被认真考虑。
最佳答案
有DatabaseTransactions
和DatabaseMigrations
。
在运行测试时,使用DatabaseTransactions
可以准备事务,触发测试并在执行后回滚所有内容DatabaseMigrations
触发php artisan migrate
命令,在销毁应用程序之前,它将回滚所有内容。
Laravel 5.5中还提供了RefreshDatabase
,它代替了DatabaseMigrations
和DatabaseTransactions
。
使用RefreshDatabase
,如果您正在使用内存数据库,它将为您运行php artisan migrate
。如果您不使用内存数据库,它将删除所有表并重新运行php artisan migrate
。
我建议您使用内存数据库,该数据库可以在phpunit.xml
文件的php标记中定义如下。
...
<php>
<env name="APP_ENV" value="testing"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
</php>
内存数据库的一些优点如下: