Jest

1. 주요 테스트 구조

Jest는 테스트를 구성하고 정리하기 위해 다음과 같은 메서드를 제공합니다:

메서드 설명
describe 테스트 그룹을 정의. 테스트를 논리적으로 묶을 수 있음. 중첩(Nested) 가능.
test 또는 it 개별 테스트 케이스를 정의. 실제 테스트가 실행되는 부분.
beforeAll 그룹의 모든 테스트 전에 한 번 실행. 비동기 작업 지원.
afterAll 그룹의 모든 테스트 후에 한 번 실행. 비동기 작업 지원.
beforeEach 각 테스트 실행 전에 실행. 테스트 간 독립성을 유지하는 데 유용.
afterEach 각 테스트 실행 후에 실행. 테스트 리소스 정리에 유용.

2. 중첩 가능성

describe 블록은 중첩이 가능하여, 테스트를 계층적으로 구성할 수 있습니다.

예시:

describe('User Service', () => {
    beforeAll(() => {
        console.log('Setup before all tests');
    });

    beforeEach(() => {
        console.log('Setup before each test');
    });

    afterEach(() => {
        console.log('Cleanup after each test');
    });

    afterAll(() => {
        console.log('Cleanup after all tests');
    });

    describe('Create User', () => {
        it('should create a user successfully', () => {
            const result = true; // 실제 로직 호출
            expect(result).toBe(true);
        });

        it('should throw an error for invalid input', () => {
            const invalidInput = null;
            expect(() => {
                // invalid input 처리 로직
                if (!invalidInput) throw new Error('Invalid input');
            }).toThrow('Invalid input');
        });
    });

    describe('Delete User', () => {
        it('should delete a user successfully', () => {
            const userExists = true;
            expect(userExists).toBe(true); // 유저 존재 확인

            const result = false; // 삭제 후 상태
            expect(result).toBe(false);
        });
    });
});

출력 순서:

  1. beforeAll 실행
  2. describe 블록의 beforeEachafterEach 실행
  3. it, test 테스트 실행
  4. afterAll 실행

3. 대표적인 Assertion: expect

expect는 테스트 결과를 검증하기 위해 사용됩니다. Jest는 다양한 Matcher를 제공합니다.

Matcher 설명
toBe(value) 값이 동일한지 확인 (===).
toEqual(object) 객체 또는 배열의 깊은 비교.
toBeTruthy() 값이 참인지 확인.
toBeFalsy() 값이 거짓인지 확인.
toContain(item) 배열이나 문자열에 특정 항목이 포함되어 있는지 확인.
toThrow(error) 함수가 특정 오류를 던지는지 확인.
toHaveLength(number) 배열 또는 문자열의 길이를 확인.

Matchers

Common Matchers