라라벨의 테스트 기능으로 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 |
댓글