Matcher

@bbearcookie · May 20, 2023 · 2 min read

Matcher란?

expect() 에 입력한 어떤 검증 대상에 대해서 기대 결과가 무엇이 나와야 하는지를 검사하는 함수이다.
API 문서에서 확인할 수 있듯 다양한 Matcher 가 존재하는데, 여기서는 기본적이면서 유용한 몇 가지의 Matcher 에 대해서만 작성해 보고자 한다.

toBe

단순한 값의 비교에 사용한다.

expect(1 + 3).toBe(4);

toEqual

객체 내부의 모든 속성에 대해서 깊은 비교를 하는데 사용한다.
toStrictEqual 을 사용하면 undefined 속성에 대해서도 더 엄격하게 비교한다고 한다.

function getUser(id: number) {
  return {
    id,
    email: `user${id}@test.com`,
  };
}

test('use toEqual', () => {
  // 실패
  expect(getUser(1)).toBe({
    id: 1,
    email: 'user1@test.com'
  });

  // 통과
  expect(getUser(1)).toEqual({
    id: 1,
    email: 'user1@test.com'
  });
});

toMatch

문자열을 대상으로 정규식을 만족하는지를 체크하는데 사용한다.

test("string", () => {
  expect(getUser(1).email).toBe("user1@test.com");
  expect(getUser(2).email).toMatch(/.*test.com$/);
});

toThrow

검증 대상이 예외를 발생하는지를 알아보는데 사용한다.
유의해야 할 점은 expect() 함수에 넘기는 검증 대상을 함수로 한 번 감싸줘야 한다는 점이다!!! 감싸주지 않는다면 예외 발생 여부를 체크하는 게 아니라 테스트 실행 도중에 정말 그 예외가 발생하게 되어 버린다.

function doThrow() {
  throw new Error('에러를 발생했습니다');
}

test('use toThrow', () => {
  expect(() => doThrow()).toThrow(new Error('에러를 발생했습니다'));
});

참고 자료

API 문서
Jest Basic (DaleSeo)
Jest 기본 문법 정리 (Inpa)

@bbearcookie
Frontend Developer