유틸 함수 jest 유닛 테스트 활용하기

회사 프로젝트에 숫자 금액을 텍스트로 환산하거나, 숫자를 텍스트로 처리하는 유틸 함수가 있는데,

간혹 경우의 수가 있다보니 예상치 못한 매개변수가 넘어오면 NaN(Not A Number) 혹은 공백 상태로 에러 처리를 못하는 경우가 종종 발생한다.

그러한 문제를 미리 해결하고자 npx 웹팩을 통해 React를 설치할 경우 탑재된 jest 를 활용하여 유닛 테스트를 진행하고자 한다.


수량 텍스트 처리 함수(countUnit) jest 유닛 테스트

test.each`
  source          | expected
  ${1030}         | ${"1천"}
  ${2670}         | ${"2천"}
  ${55670}        | ${"5만"}
  ${8500670}      | ${"850만"}
  ${10500670}     | ${"1050만"}
  ${410500670}    | ${"4억"}
  ${730010500670} | ${"7300억"}
`("숫자 값의 문자 단위 처리", ({ source, expected }) => {
  const result = countUnit(source);
  expect(result).toBe(expected);
});

여기서 jest 메서드인 each를 사용하면 중복된 코드를 간략화하여 처리할 수 있다.(DB 쿼리문 템플릿 문법과 비슷하다.)

숫자 금액 텍스트 처리 함수(moneyUnit) jest 유닛 테스트

test.each`
  source          | expected
  ${0}            | ${null}
  ${1030}         | ${"1,030원"}
  ${31300}        | ${"31,300원"}
  ${670300}       | ${"670,300원"}
  ${2356300}      | ${"2,356,300원"}
  ${82300000}     | ${"8천만원"}
  ${102300000}    | ${"1.0억원"}
  ${4523050000}   | ${"45.2억원"}
  ${20523050000}  | ${"205억원"}
  ${505230500000} | ${"5,052억원"}
`("숫자 값의 원(문자) 단위 처리", ({ source, expected }) => {
  const result = moneyUnit_NotSpan(source);
  expect(result).toBe(expected);
});

Wh 단위 처리 함수(capacityUnit) jest 유닛 테스트

test.each`
  source   | expected
  ${0}     | ${" kWh"}
  ${1}     | ${" MWh"}
  ${10}    | ${" MWh"}
  ${100}   | ${" MWh"}
  ${10000} | ${" GWh"}
`("숫자 값의 와트/시간 단위 처리", ({ source, expected }) => {
  const value = capacityUnit(source);
  const result = value.props.children[1].props.children;
  expect(result).toBe(expected);
});