취미/프로그래밍

Laravel TDD 찍먹

Anything Doing OK 2024. 9. 11. 02:46

TDD

유저 로그인에 대해 TDD를 진행했다.

 

진행하면서 떳던 에러사항에 대해서는 진행하지 않습니다. 

 

cp .env .env.testing 명령어 사용해서 .testing 파일 생성

./vendor/bin/sail artisan key:generate --env=testing 

명령어 사용해서 APP_KEY 값 설정

./vendor/bin/sail artisan migrate --env=testing 으로 migrate 진행

 

.env.testing 파일

 
DB_DATABASE=testing   # 테스트용 데이터베이스 이름
 

다른 부분을 제외하고 만 따로 지정해주면 된다.

 

php artisan make:test LoginUserTest

으로 테스트할 php 파일 만들어주고

 

<?php

namespace Tests\Feature;

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class LoginUserTest extends TestCase
{
    use RefreshDatabase;

    /** @test */
    public function user_can_login_with_valid_credentials()
    {
        $user = User::factory()->create([
            'email' => 'test@example.com',
            'password' => bcrypt('password'),
        ]);
   
        $response = $this->post('/login', [
            'email' => 'test@example.com',
            'password' => 'password',
        ]);
   
        $response->assertStatus(302);  // 로그인 성공 시 리다이렉트 발생
        $response->assertRedirect('/dashboard');  // 대시보드로 리다이렉트하는지 확인
        $this->assertAuthenticatedAs($user);
    }
   
    public function user_cannot_login_with_invalid_credentials()
    {
        $user = User::factory()->create([
            'email' => 'test@example.com',
            'password' => bcrypt('password'),
        ]);
   
        $response = $this->post('/login', [
            'email' => 'test@example.com',
            'password' => 'wrong-password',
        ]);
   
        $response->assertStatus(302);  // 잘못된 로그인 시에도 리다이렉트 발생
        $response->assertSessionHasErrors('email');  // 오류 메시지가 세션에 저장되는지 확인
        $this->assertGuest();  // 여전히 인증되지 않은 상태여야 함
    }
}

이런 식으로 테스트 코드 짜주면 된다. 

 

./vendor/bin/sail test --filter LoginUserTest 
이후 명령어 실행해주면 최초 이미지 처럼 TDD 성공이라고 뜬다

실패일 경우

TEST 실패

 

TDD 를 진행하기전 로그인 기능은 구현되어 있는 상태여야 한다.