Laravel 5.5:使用DatabaseMigrations进行测试会删除所有表

时间:2018-01-29 21:58:07

标签: laravel phpunit laravel-5.5

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

我注意到,当我运行一个具有DatabaseMigrations特征的测试类时,运行测试后将删除与测试类相关的所有数据库表。

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

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:13)

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>

内存数据库的一些优点如下:

  1. 真的很快跑。
  2. 不会影响您的实际数据库,因为所有内容都发生在内存中

答案 1 :(得分:0)

此特征中的migrate:rollback方法在运行测试后执行$this->artisan('migrate:rollback'); 命令。此命令删除所有表。

{{1}}