私は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>
メモリ内データベースの利点のいくつかは次のとおりです。
- 本当に速く走る
- すべてがメモリ内で発生するため、実際のデータベースには影響しません
回答№2の場合は0
ザ runDatabaseMigrations()
メソッドがこの特性で実行する migrate:rollback
テストを実行した後のコマンド。このコマンドは、すべてのテーブルを削除します。
$this->artisan("migrate:rollback");