본문 바로가기
IT/PHP

Laravel - TDD(1)

by Sungjun_ 2021. 1. 13.

라라벨의 테스트 기능으로 api 작성

 

기본적으로 라라벨 프로젝트를 설치했다고 가정하고 시작하겠습니다.

 

phpunit.xml 파일을 열면 <php></php> 태그로 묶여있는 곳이 있습니다.

  <php>
        <server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <server name="CACHE_DRIVER" value="array"/>
        <!-- <server name="DB_CONNECTION" value="sqlite"/> -->
        <!-- <server name="DB_DATABASE" value=":memory:"/> -->
        <server name="MAIL_MAILER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
        <server name="TELESCOPE_ENABLED" value="false"/>
  </php>

 

저기서 주석 부분을 지워줍시다.

    <php>
        <server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <server name="CACHE_DRIVER" value="array"/>
        <server name="DB_CONNECTION" value="sqlite"/>
        <server name="DB_DATABASE" value=":memory:"/>
        <server name="MAIL_MAILER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
        <server name="TELESCOPE_ENABLED" value="false"/>
    </php>

 

그리고 .env 파일 DB_DATABASE 부분에 설정한 이름으로 DB 스키마를 만들어줍니다.

php artisan make:model Task -m 이렇게 입력해 모델과 마이그레이션 파일을 만듭니다.

App\Models 폴더에 Task.php 파일이 만들어지고

database\migrations 폴더에 create_tasks_table 파일이 만들어집니다.

 

create_tasks_table 파일을 열어서 up 메서드 부분에 다음과 같이 입력합니다.

public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->longText('story');
            $table->timestamps();
        });
    }

 

php artisan migrate 명령어로 테이블을 생성합니다.

 

이제 php artisan make:test TaskTest 명령어를 입력합니다.

이 파일은 tests\Feature 폴더 안에 생성됩니다.

 

라라벨의 테스트 시스템은 tests 폴더 안에 있는 Test로 끝나는 모든 파일에 작성된 테스트 코드를 실행합니다.

그렇기 때문에 테스트 파일의 이름 끝에 Test를 붙여야 합니다.

 

<?php

namespace Tests\Feature;

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

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

        $response->assertStatus(200);
    }
}

 

TaskTest.php 파일에 use RefreshDatabase, WithFaker; 이 부분을 먼저 추가해줍니다.

 

RefreshDatabase는 테스트를 시작할 때 테스트 데이터베이스에 마이그레이션하고

테스트가 끝나면 다시 롤백하는 역할을 합니다.

WithFaker는 팩토리에서 faker를 사용하기 위해 쓰는데

나중에 팩토리 관련해서 포스팅할 때 따로 설명하겠습니다.

 

테스트 파일 이름 끝에 Test를 붙인 것 같이, test로 시작하는 메서드나

다큐멘테이션 블록에 @test가 적힌 메서드만 테스트가 실행됩니다.

 

현재 있는 test_example 메서드를 보면 앞에 test_가 붙어있습니다.

이 방법 말고도

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

        $response->assertStatus(200);
    }
}

 

이렇게 다큐멘테이션 블록에 @test를 적으면 test_를 붙이지 않아도 테스트가 실행됩니다.

앞으로 저는 그냥 test_를 붙이겠습니다.

 

마지막으로 php artisan make:controller Api/TaskController --api 명령어를 입력해줍니다.

그러면 App\Http\Controllers\Api 안에 TaskController.php가 생깁니다.

 

기본적인 준비는 끝났고 다음 포스팅에 이어서 하겠습니다.

'IT > PHP' 카테고리의 다른 글

Laravel - TDD(3)  (0) 2021.01.13
Laravel -TDD(2)  (0) 2021.01.13
Laravel 8 - CRUD(9)  (0) 2021.01.08
Laravel 8 - CURD(8)  (0) 2021.01.08
Laravel 8 - CRUD(7)  (0) 2021.01.07

댓글