Laravel, Pest 사용하기

2020. 5. 28. 16:13개발/PHP

먼저 Pest는 Testing Framework로 소개를 하고 있다.

더 단순하게 테스트를 하는데 목적이 있는 것으로 보인다.

 

https://pestphp.com/

 

실제로 설치를 해보고 기존에 가지고 있던 post 및 db 체크를 하는 테스트 코드를 바꾸어 보았다.

 

 

설치

늘 그렇듯 설치를 먼저 한다.

그리고 항상 그렇듯 사이트에느 설명이 잘 되어 있다.

https://pestphp.com/docs/installation/

 

composer require phpunit/phpunit:"^9.0" --dev --update-with-dependencies

composer require nunomaduro/collision:"^5.0" --dev --update-with-dependencies

composer require pestphp/pest --dev

php artisan pest:install

./vendor/bin/pest

(왜 티스토리  코드블럭에는 쉘이 없는 것인가...)

 

bin/pest 를 실행하면 기존의 테스트 코드들이 잘 실행되는 것을 볼 수 있다.

 

 

 

테스트

 

RollingPaperTest에는 데이터를 api 통신을 해서 200 코드를 받는지, DB에 자료가 잘 들어가 있는지를 체크한다.

기존 코드는 다음과 같았다.

 

<?php


namespace Tests\Feature;


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

class RollingPaperTest extends TestCase
{
    use RefreshDatabase;
    use WithFaker;


    public function testPost()
    {
        $data = [
            'receiver' => $this->faker->name,
            'text' => $this->faker->text,
        ];


        $response = $this->post('/api/rollingpaper/wirte', $data);


        $this->assertEquals(200, $response->getStatusCode());
        $this->assertDatabaseHas('rolling_paper', ['receiver' => $data['receiver'], 'note' => $data['text']]);
    }
}

 

변경하기 전, faker를 사용하기 위해 추가로 플러그인을 설치해야 했다.

composer require pestphp/pest-plugin-faker --dev

 

그리고 소스를 변경했다.

 

<?php


use Illuminate\Foundation\Testing\RefreshDatabase;


uses(RefreshDatabase::class);


test('post', function () {
    $data = [
        'receiver' => faker()->name,
        'text' => faker()->text,
    ];


    $response = $this->post('/api/rollingpaper/wirte', $data);


    $this->assertEquals(200, $response->getStatusCode());
    $this->assertDatabaseHas('rolling_paper', ['receiver' => $data['receiver'], 'note' => $data['text']]);
});

 

좀 짧아졌나?

그래도 10줄 가량은 줄인 것 같다.

 

내가 잘 못써서 그런지 아니면 이제야 나온 서비스라 그런지 (5월 20일에 트위터로 공개를 했다.)

post나 databasehas 같은 경우는 아직 간단히 쓰기가 쉽지 않았다.

 

그래도 class, function이나 기타 어떻게 보면 형식적인 부분을 많이 제거해주는 느낌은 있었다.

 

 

여담

 

편하게 해주는건 참 좋은데, 개인적인 의견은 기본 문법을 모른다는건 소위 좀 별로였다.

너무 오랫동안 프레임워크에 의존적이면 pdo를 선언하고, prepare, bindparam, execute를 하는 일련의 과정이나

애초에 pdo가 뭔지.. 날쿼리를 짜는 스킬이 많이 무뎌진다.

 

pest도 분명 생산성을 생각하면 좋은 부분이 있으나

괜히 이런 편의성이 우려스럽다.

 

꼰대인가...