laravelでテストを実行したときに、テストデータがDBに残らないようにしたい。
そんな時に便利なのが、LaravelのDatabaseTransactionsトレイトです。
DatabaseTransactionsの使い方
ServiceTest.php
use Illuminate\Support\Facades\DB;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ServiceTest extends \TestCase
{
use DatabaseTransactions;
public function setUp():void
{
//
テストのソースに上記のuse文を3つ追加するだけです。
DatabaseTransactionsで行われていること
DatabaseTransactionsを利用すると
テストを実行しているあいだだけ有効なトランザクションを作ってくれます。
つまり、テストのsetup時点でbeginTransactionして、テスト終了時にrollbackしてくれます。
注意点
autoIncrementのカラムで、自動採番された数字は戻らないです。
例) users.id=1のレコードがrollbackされても、レコードは消えるが、次採番されるidは2になる。
参考文献
[データベースのテスト 5.4 Laravel - ReaDouble]
(https://readouble.com/laravel/5.4/ja/database-testing.html)
LaravelでRefreshDatabaseを使えない場合はどうするべきか