【发布时间】:2018-07-08 16:52:59
【问题描述】:
我一直在自学如何在 Laravel 5.5 中编写测试用例。
我注意到,当我运行具有DatabaseMigrations trait 的测试类时,所有与测试类相关的数据库表在运行测试后都会被删除。
默认情况下会发生这种情况吗?我在文档中没有找到任何线索。
我们将不胜感激。
【问题讨论】:
标签: laravel phpunit laravel-5.5
我一直在自学如何在 Laravel 5.5 中编写测试用例。
我注意到,当我运行具有DatabaseMigrations trait 的测试类时,所有与测试类相关的数据库表在运行测试后都会被删除。
默认情况下会发生这种情况吗?我在文档中没有找到任何线索。
我们将不胜感激。
【问题讨论】:
标签: laravel phpunit laravel-5.5
有DatabaseTransactions和DatabaseMigrations。
使用DatabaseTransactions,当您运行测试时,它会准备事务、触发测试并在执行后回滚所有内容
DatabaseMigrations 触发php artisan migrate 命令,在应用程序被销毁之前,它会回滚所有内容。
还有 RefreshDatabase 出现在 Laravel 5.5 中,它有点取代了 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>
内存数据库的一些优点如下:
【讨论】:
此 trait 中的 runDatabaseMigrations() 方法在运行测试后执行 migrate:rollback 命令。此命令删除所有表。
$this->artisan('migrate:rollback');
【讨论】: