티스토리 뷰

2개 이상의 데이터베이스를 사용할 경우 DatabaseTrasaction 미들웨어를 사용해도 default 값의 DB에 한해 트랜잭션이 처리된다.

// config/databases.php
return [
    'default' => env('DB_CONNECTION', 'default'),
    ...

사용하는 테스트마다 트랜잭션을 지정해도 되긴하나 테스트파일이 추가될 떄 마다 지정해줘야하는 번거로움이 있다.

class SomeTest extends TestCase
{
    protected $db;
    public function setUp(): void
    {
        $this->db = \DB::connection('somedatabase1');
        $this->db->beginTransaction();
        parent::setUp();
    }

    public function tearDown(): void
    {
        $this->db->rollback();
        parent::tearDown();
    }
}

DatabaseTrasaction 미들웨어를 사용할 경우 기본 config('dataabase.default')에 한해 적용된다.
connectionsToTransact 값을 정의하여 다중 커넥션에 대해 트랜잭션 처리 할 수 있다.

class SomeTest Extends TestCase
{
    use DatabaseTransaction;

    protected $connectionsToTransact = ['somedatabase1', 'somedatabase2;];

    ...
}

출처: https://laracasts.com/discuss/channels/laravel/phpunit-test-not-running-with-multiple-database-setup

댓글