본문 바로가기

Laravel

Laravel DatabaseMigrations, DatabaseTransactions

DatabaseMigrations

 

각각의 테스트를 실행하기 전에 DB tables들을 migrate 한다. 각각 테스트가 끝난 후에는 추가되었던 데이터를 지운다.

<?php

namespace Illuminate\Foundation\Testing;

trait DatabaseMigrations
{
    /**
     * @before
     */
    public function runDatabaseMigrations()
    {
        $this->artisan('migrate');

        $this->beforeApplicationDestroyed(function () {
            $this->artisan('migrate:rollback');
        });
    }
}

데이터를 migrate하고 테스트가 끝날 때 roll back한다.

 

DatabaseTransactions

각각의 테스트를 migrate를 하고 roll back을 하는건 다루기 쉽지만 SQLite를 사용하지 않으면 빠르게 작업하기 어렵다. SQLite의 일부 제한이 있기 때문에 항상 SQLite를 사용할 수 없을 수도 있다.

 

각각의 테스트가 실행될 때 DatabaseTransactions는 database transaction을 시작한다. 테스트가 실행되고 테스트가 끝날 때 그 transaction은 roll back된다. 이는 각각의 테스트가 끝날 때마다 DB가 깨끗해짐을 의미한다.

<?php

namespace Illuminate\Foundation\Testing;

trait DatabaseTransactions
{
    /**
     * @before
     */
    public function beginDatabaseTransaction()
    {
        $this->app->make('db')->beginTransaction();

        $this->beforeApplicationDestroyed(function () {
            $this->app->make('db')->rollBack();
        });
    }
}

beginTransaction()으로 transaction을 시작하고 test가 끝날 때 roll back을 한다.

'Laravel' 카테고리의 다른 글