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

Hir*_*oki 6 phpunit laravel laravel-5.5

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

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

这是默认发生的吗?我没有在文档中找到任何线索.

任何建议将被认真考虑.

Pri*_*'zi 18

DatabaseTransactionsDatabaseMigrations.

随着DatabaseTransactions当你运行你的测试,它准备交易,触发测试和执行后滚一切恢复

DatabaseMigrations触发php artisan migrate命令,在应用程序被销毁之前,它会回滚所有内容.

也有RefreshDatabase它排在Laravel 5.5,它种替代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>
Run Code Online (Sandbox Code Playgroud)

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

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