Posts jest
Post
Cancel

jest

테스트 패턴

1
2
3
test("테스트 설명", () => {
  expect("검증 대상").toXX("기대 결과");
});
1
2
3
4
5
6
function getUser(id) {
  return {
    id,
    email: `user${id}@test.com`,
  };
}

위에서 사용한 toBe함수를 이용 할 경우 아래와 같이 테스트가 실패하는것을 알 수 있습니다.

1
2
3
4
5
6
test("return a user object", () => {
  expect(getUser(1)).toBe({
    id:1,
    email: `user1@test.com`,
  })
});

Jest는 객체(object)를 검증할때에는 toBe() 대신에 toEqual()함수를 이용 할 것을 가이드 해주고 있습니다. 실제로 테스트 코드를 작성할 때는 객체를 검증해야할 일이 많기 때문에 toEqual()함수를 가장 많이 접할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    expect(received).toBe(expected) // Object.is equality

    If it should pass with deep equality, replace "toBe" with "toStrictEqual"

    Expected: {"email": "user1@test.com", "id": 1}
    Received: serializes to the same string

      11 |
      12 | test("return a user object", () => {
    > 13 |   expect(getUser(1)).toBe({
         |                      ^
      14 |     id: 1,
      15 |     email: `user1@test.com`,
      16 |   });

toBeTruthy, toBeFalsy

toEqual()함수 다음으로 많이 사용되는 Matcher 함수는 아마도 toBeTruthy()toBeFalsy()일 것입니다. 많은 분들이 아시다시피 느슨한 타입 기반 언어인 js는 java와 같이 강한 타입 기반 언어처럼 truefalse가 boolean타입에 한정되지 않습니다. 따라서 숫자 1true로 간주되고, 숫자0false로 간주되는 것과 같이 모든 타입의 값들을 true아니면false로 간주하는 규칙이 있습니다. toBeTruthy()는 검증 대상이 이 규칙에 따라 true로 간주되면 테스트 통과이고, toBeFalsy는 반대로 false로 간주되는 경우 테스트가 통과됩니다.

1
2
3
4
test("number 0 is falsy but string 0 is truthy", () => {
  expect(0).toBeFalsy();
  expect("0").toBeTruthy();
});
This post is licensed under CC BY 4.0 by the author.