본문 바로가기
프로그래밍/Web

Laravel 5.8 Unit Tests 시 SQLite 를 메모리에서 사용하기

by 사악신 2019. 9. 4.

config/database.php 의 connections 에서 아래의 설정을 추가합니다.

'sqlite_testing' => [
	'driver' => 'sqlite',
	'database' => ':memory:',
	'prefix' => '',
],

phpunit.xml 의 DB_DEFAULT 값을 sqlite_testing 으로 변경합니다.

<php>
  <server name="APP_ENV" value="testing"/>
  <server name="BCRYPT_ROUNDS" value="4"/>
  <server name="CACHE_DRIVER" value="array"/>
  <server name="MAIL_DRIVER" value="array"/>
  <server name="QUEUE_CONNECTION" value="sync"/>
  <server name="SESSION_DRIVER" value="array"/>
  <server name="DB_DEFAULT" value="sqlite_testing"/>
</php>

PHP Storm 을 사용할 경우, Languages & Frameworks > PHP > Test Frameworks 에서 phpunit.xml 을 지정하여야합니다.

 

단위 테스트 파일에서 RefresDatabase 을 선언합니다. 테스트 메소드가 호출될때마다 데이터베이스가 초기화(rollback, migrate)되므로, 초기화 데이터는 setUp() 에 추가합니다.

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ExampleTest extends TestCase
{
    use RefreshDatabase;
    
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

패스포트를 테스트할 경우, setUp() 메소드에 아래와 같이 선언합니다.

protected function setUp(): void
{
    parent::setUp();

    $this->artisan('passport:install');
}

테스트 중 https 관련 cURL 오류가 발생하면, cacert.pem 파일을 다운로드 받은 후 php.ini 의 curl.cainfo, openssl.cafile 에 절대경로를 지정합니다.

반응형

댓글