/ / Laravel 5.5:DatabaseMigrationsでテストすると、すべてのテーブルが削除されます - laravel、phpunit、laravel-5.5

Laravel 5.5:DatabaseMigrationsでテストすると、すべてのテーブルが削除されます - laravel、phpunit、laravel-5.5

私はLaravel 5.5でテストケースを書く方法を自分自身で教えてきました。

私が気づいたのは、テストクラスを DatabaseMigrations テストクラスを実行すると、テストクラスに関連するすべてのDBテーブルが削除されます。

これはデフォルトで行われますか?私は医者に何か手がかりを見つけられませんでした。

アドバイスをいただければ幸いです。

回答:

回答№1の場合は3

がある DatabaseTransactions そして DatabaseMigrations.

DatabaseTransactions テストを実行すると、トランザクションが準備され、テストが起動され、実行後にすべてがロールバックされます

DatabaseMigrations トリガー php artisan migrate コマンドが実行され、アプリケーションが破棄される前にすべてがロールバックされます。

もあります RefreshDatabase Laravel 5.5に入った DatabaseMigrations そして DatabaseTransactions.

RefreshDatabase、インメモリデータベースを使用している場合、それは実行されます php artisan migrate あなたのために。インメモリデータベースを使用していない場合は、すべてのテーブルが削除され、 php artisan migrate.

私は、メモリ内のデータベースを使用することをお勧めします。これは、あなたのPHPタグの中で定義されています。 phpunit.xml ファイル。

...
<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. すべてがメモリ内で発生するため、実際のデータベースには影響しません

回答№2の場合は0

runDatabaseMigrations() メソッドがこの特性で実行する migrate:rollback テストを実行した後のコマンド。このコマンドは、すべてのテーブルを削除します。

$this->artisan("migrate:rollback");