概要
タイトルでほぼ終わってる感がありますが、DatabaseTransactions
トレイトを利用すると、DBへの書き込みテストを高速に行うことができます。
説明
DBに対するテストをする場合にRefreshDatabase
を利用する例をよく見ますが、
RefreshDatabaseは内部的にphp artisan migrate:fresh
が行われており、データベースの作り直しから始まるので、Migrationが増えてくるとかなり時間が掛かるようになってきます。
DatabaseTransactions
を利用するとテストのsetup時点でbeginTransactionして、tearDown時にrollbackしてくれるので、データベースを作り直すことが無く、高速に実行できます。
デメリットは?
データベースを作り直すわけではないので、完全に実行前に戻るわけではありません。
例えばautoIncrementなidを持つtableなどに対してテストを行った場合は、たとえrollbackしても自動採番の数字は戻りません。そこら辺を理解した上で利用できる状況であれば、とても高速です。