我一直在自学如何在Laravel 5.5中编写测试用例。

我注意到,当我运行一个具有DatabaseMigrations特征的测试类时,在运行测试后,所有与该测试类相关的DB表都将被删除。

默认情况下会发生这种情况吗?我尚未在文档中找到任何线索。

任何建议将被认真考虑。

最佳答案

DatabaseTransactionsDatabaseMigrations

在运行测试时,使用DatabaseTransactions可以准备事务,触发测试并在执行后回滚所有内容
DatabaseMigrations触发php artisan migrate命令,在销毁应用程序之前,它将回滚所有内容。

Laravel 5.5中还提供了RefreshDatabase,它代替了DatabaseMigrationsDatabaseTransactions

使用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>

内存数据库的一些优点如下:
  • 运行速度非常快的
  • 不会影响您的实际数据库,因为一切都发生在内存中
  • 09-25 19:44