Jest의 Test Coverage에 대해서 알아보자

NSH·2022년 6월 27일
0

테스트 커버리지란?

테스트 커버리지는 테스트가 실행될 때 코드에 어떤 부분이 테스트 되었고, 어떤 부분이 테스트되지 않았는지 확인하여 코드가 얼마나 철저하게 테스트 되었는지 확인할 수 있다. 개발자도 사람이므로 테스트를 커버하지 못하는 부분이 발생할 수 있고, 복잡한 코드에서는 간과할 수 있는 부분이 있을 수 있다. 따라서 테스트 커버리지를 확인해 휴먼 에러를 최대한 최소화하는 것이 좋다.

커버리지의 기준

짝수를 판단하는 예제 코드로 각 커버리지의 기준을 알아보자.

예제 코드

// isEven.js
function isEven(number) {
  if (number % 2 === 0) {
    return true;  // 짝수
  } else {
    return false; // 홀수
  }
}

// isEven.test.js
import { isEven } from "./isEven";
it("isEven", () => {
  expect(isEven(2)).toBeTruthy();
});

// 테스트 커버리지
----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |      75 |       50 |     100 |      75 |                   
isEven.js |      75 |       50 |     100 |      75 | 5                 
----------|---------|----------|---------|---------|-------------------

테스트 커버리지 리포트

기준

구문 커버리지(Statement Coverage)

구문 커버리지는 테스트에서 실행된 코드 문의 비율을 측정한다. 4개의 코드 문이 있고 테스트 중에 3개의 문이 실행되었다면 구문 커버리지(%Stmts)75%가 된다.

분기 커버리지(Branch Coverage)

if-else, switch-case 그리고 삼항 연산자를 사용할 때 조건 분기의 각 경로가 테스트되었는지 평가한다. 예제 코드에서if문은 테스트되고 else문은 테스트가 되지 않았다면 조건 커버리지는 50%가 된다.

함수 커버리지(Function Coverage)

테스트 중에 코드의 각 함수가 한 번이상 호출되었는지 평가한다. isEven 함수 하나만 존재하며, 해당 함수가 호출되어 테스트 되었으므로 %Funcs100%가 된다.

라인 커버리지(Line Coverage)

테스트 중에 실행된 코드 라인의 비율을 측정한다. 4줄의 코드에서 3줄이 테스트 되었으면 라인 커버리지(%Line)은 75%가 된다.

정리

테스트 코드의 중요성을 이해하고 더 높은 테스트 커버리지를 달성하려고 노력한다면 자연스레 코드 퀄리티가 향상되고 기술 부채를 줄일 수 있으며 보다 안정적이고 유연한 프로젝트를 만들 수 있다고 생각한다.😁

profile
잘 하고 싶다.

0개의 댓글