본문 바로가기

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' 카테고리의 다른 글

Laravel env() vs PHP getenv()  (0) 2020.02.21
Laravel optional helper 라라벨  (0) 2020.02.21
PhpStorm 공식 홈페이지 단축키 모음  (0) 2020.01.25
Laravel tests, RefreshDatabase  (0) 2020.01.25
라라벨 설치 Laravel install  (0) 2019.12.05