jest 입문하기 2

미마모코딩·2022년 9월 10일
0

jest

목록 보기
2/3
post-thumbnail

jest의 matcher의 대해 오늘은 공부했고 이야기 해볼까한다.

const fn = {
  add: (num1, num2) => num1 + num2,
  makeUser: (name, age) => ({ name, age }),
};

먼저 makeUser라는 함수가 있다.

이름과 나이를 받아 객체로 리턴하는 함수이다.

그럼 테스트 코드를 어떻게 작성 할 수 있을까?

test("이름과 나이를 전달받아 객체를 반환해줘", () => {
  expect(fn.makeUser("minhae", 30)).toEqual({ name: "minhae", age: 30 });
});

위 테스트코드에서 toBe 대신 toEqual를 사용했다.

toEqual은 toEqual은 객체나 배열의 모든 필드를 재귀적으로 확인합니다.
라고 공식문서에 쓰여있다.

이러한 이유로 toBe로 비교를 확인하게된다면
If it should pass with deep equality, replace "toBe" with "toStrictEqual" << 이러한 메세지와 함께 failed를 반환한다.

toBeNull

toBeUndefined

toBeDefined

위 matcher들은 이름 그대로 null인지 undefined인지 혹은 defined인지 나타낸다.

예시

test("null은 null이다.", () => {
  expect(null).toBeNull();
});

위 코드처럼 작성 할 수 있다.

toBeFalsy

toBeTruthy

값이 falsy한지 truthy한지를 나타낸다.

자바스크립트에서 0은 false이다.

예시

test("0은 falsy하다.", () => {
  expect(fn.add(1, -1)).toBeFalsy();
});
test("비어있지 않은 문자열은 true", () => {
  expect(fn.add("hello", "world")).toBeTruthy();
});

문자열 + 문자열은 값이 존재하기에 truthy한 값이다.

toBeGreaterThan 크다

toBeGreaterThanOrEqual 크거나 같다.

toBeLessThan 작다

toBeLessThanOrEqual 작거나 같다.

이렇게 특정한 수의 비교도 가능하다.

예시

test("id는 15자이하여야한다.", () => {
  const id = "THE_BLACK_ORDER";
  expect(id.length).toBeLessThanOrEqual(10);
});

Expected: <= 10
Received: 15를 나타내면서 failed를 나타낸다.

test("비밀번호 4자리", () => {
  const pas = "1234";
  expect(pas.length).toBe(4);
});

정상적으로 동작한다.

개발적으로 이런 대소관계 비교를 어디에서 접목시킬 수 있을까?

사용자가 입력한 아이디의 길이제한 , 업로드된 파일의 크기제한이 필요할 때 사용해볼수있다.

toContain

배열안에 특정요소가 있나? toContain

test("배열안에 minhae가 있나?", () => {
  const user = "minhae";
  const array = ["juho", "minhae", "gunho", "mike"];
  expect(array).toContain(user);
});

toBeCloseTo

자바스크립트에서 0.1 + 0.2 !== 0.3이라는 것을 모두 흔하게 알고있을 것이다.

이유는 https://velog.io/@coin46/0.1-0.2-0.3 를 참고하길 바란다.

test("0.1+0.2=0.3이다", () => {
  expect(fn.add(0.1, 0.2)).toBeCloseTo(0.3);
});

이런식으로 테스팅을 할 수 있다.

toMatch

test("HelloWordl에 a가 포함되어있지않다.", () => {
  expect("HelloWorld").not.toMatch(/a/);
});

toMatch 문자열이 정규식과 일치하는지 확인하는 데 사용한다 대소문자를 구분하지 않기 위해선 (/a/i) 의 형식으로 써준다 .

0개의 댓글