본문 바로가기
내일배움 정리/JS 문법 공부

jest

by GREEN나무 2025. 1. 16.
728x90

기본 문법

// calculator.test.js
// 테스트 실행 명령어
// npm test
import { add } from './calculator.js';
test('두 수를 더하는 함수 테스트', () => {
  expect(add(1, 2)).toBe(4);
});

// 함수 import
// test, expect, toBe
/* 
  test('설명',()=>{
    expect(들어오는 값).toBe(기댓값)
  })
  expect(들어오는 값).toBe(기댓값)
  */


Test: 실제 테스트를 수행하는 함수. 여기 안에 테스트 로직을 작성해서 사용.


Expect: 테스트 대상 함수를 실행한 결과를 “예상” 값과 비교해 확인하는 기능

  • 테스트가 성공하거나 실패하도록 설정하는 데 사용하는 핵심 함수
  • 보통 expect(결과값).toBe(예상값) 형태로 작성
  • toEqual, toContain, toBeTruthy 등

기본 사용법

test('값이 일치하는지 테스트', () => {
  expect(1 + 1).toBe(2);
});

 


기본 매처

1. 값 비교

  • toBe(value): 엄격한 동일성 비교 (===). 메모리 위치도 동일해야함
      expect(2 + 2).toBe(4);
  • toEqual(value): 객체와 배열의 값이 같은지 확인. 값만 동일하면 됨.
      expect({ a: 1 }).toEqual({ a: 1 });
  • toStrictEqual(value): 객체의 모양과 데이터 타입까지 검사.
      expect({ a: 1 }).toStrictEqual({ a: 1 });

2. Boolean 관련

  • toBeTruthy(): 값이 true로 평가되는지 확인.
      expect(1).toBeTruthy();
  • toBeFalsy(): 값이 false로 평가되는지 확인.
      expect(0).toBeFalsy();
expect(true).toBeTruthy();
expect(false).toBeFalsy();
expect(0).toBeFalsy(); // 0은 Falsy로 평가
expect('Hello').toBeTruthy(); // 빈 문자열이 아니면 Truthy

3. 숫자 관련

  • toBeGreaterThan(value): 특정 값보다 큰지 확인.
      expect(10).toBeGreaterThan(5);
  • toBeGreaterThanOrEqual(value): 특정 값보다 크거나 같은지 확인.
      expect(10).toBeGreaterThanOrEqual(10);
  • toBeLessThan(value): 특정 값보다 작은지 확인.
      expect(5).toBeLessThan(10);
  • toBeLessThanOrEqual(value): 특정 값보다 작거나 같은지 확인.
      expect(10).toBeLessThanOrEqual(10);
  • toBeCloseTo(value, precision): 소수점 비교.
      expect(0.1 + 0.2).toBeCloseTo(0.3, 5); // precision은 옵션

4. 문자열 관련

  • toMatch(regexp or string): 정규식 또는 특정 문자열과 일치하는지 확인. 
  • expect('hello world').toMatch(/world/); expect('hello world').toMatch('hello');

5. 배열 및 반복 가능한 객체

  • toContain(value): 배열이 특정 값을 포함하는지 확인.
      expect([1, 2, 3]).toContain(2);
  • toContainEqual(value): 객체를 포함하는 배열인지 확인.
      expect([{ a: 1 }, { b: 2 }]).toContainEqual({ b: 2 });
  • toHaveLength(value): 배열이나 문자열의 길이를 확인.
      expect([1, 2, 3]).toHaveLength(3);

6. 예외 처리

  • toThrow(error?): 함수가 특정 에러를 던지는지 확인. 
  • expect(() => { throw new Error('에러 발생!'); }).toThrow('에러 발생!');

7. 객체 관련

  • toHaveProperty(keyPath, value?): 객체에 특정 속성이 있는지 확인.
    expect({ a: 1, b: 2 }).toHaveProperty('a', 1);
    

비동기 코드 테스트

1. resolves와 rejects

  • Promise의 성공 또는 실패를 테스트.
    await expect(Promise.resolve(42)).resolves.toBe(42);
    await expect(Promise.reject('에러')).rejects.toMatch('에러');
    

2. 비동기 함수

  • async/await를 활용.
    test('비동기 테스트', async () => {
      const data = await fetchData();
      expect(data).toBeDefined();
    });
    

부정 테스트

  • not을 사용하여 부정적인 조건 확인.
    expect(2 + 2).not.toBe(5);
    expect([1, 2, 3]).not.toContain(4);
    

이 외에도 Jest는 커스텀 매처를 정의하거나 추가 플러그인으로 매처를 확장할 수 있습니다.
공식 문서: Jest Expect 문법


 

 

TIP

describe : 동일한 주제 안에 속해있는 여러 test 작성 시 사용

  유사한 테스트를 그룹화하면 관리하기 쉽고, 가독성도 좋아진다.

import { add } from "./calculator.js";

describe("calculator", () => {
  test("두 수를 더하는 함수 성공 테스트", () => {
    expect(add(1, 2)).toBe(3);
  });
  test("두 수를 더하는 함수 실패 테스트", () => {
    expect(add(1, 2)).not.toBe(4);
  });
});

 

beforeEach : 각 테스트 시작 전에 실행되는 부분.
     보통 초기화 작업 등을 넣을 수 있음

  afterEach : 각 테스트가 끝난 후 실행되는 부분

describe('수학 함수 테스트', () => {
  beforeEach(() => {
   // 테스트 시작 전 실행
  });

  afterEach(() => {
    // 테스트 종료 후 실행
  });
  
  test('1 + 2 = 3', () => {
    const result = add(1, 2);
    expect(result).toBe(3); // 3이 맞는지 확인
  });
});

 

toThrow: 함수 호출 시 오류(예외)가 발생하는지, 해당 메시지가 맞는지 확인

expect(() => {
  throw new Error('Something broke!');
}).toThrow('Something broke!');