유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다. 즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다. 이를 통해서 언제라도 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악하고 바로 잡을 수 있도록 해준다.
페이스북에서 만든 자바스크립트 테스팅 라이브러리입니다. 기존에는 조금씩 다른 기능의 여러 테스팅 라이브러리를 조합해서 사용하곤 했는데 Jest는 한 번의 설치만으로 대부분의 테스팅 기능을 사용할 수 있게 해줍니다.
이번 포스팅에서는 Jest의 기본적인 사용법에 대해 알아보도록 하겠습니다.
먼저 프로젝트를 생성한 후 jest를 설치해 줍니다
npm init -y
npm i -D jest
그 후 package.json 파일의 script property에서 다음의 명령어를 추가해 줍니다
// package.json
"scripts":{
"test": "jest"
}
설정까지 끝났으면 test.js 라는 파일을 만든 후 다음과 같이 코드를 입력합니다.
// 테스트할 코드
export const add = (x, y) => x + y;
// 테스팅 코드
describe("add", () => {
test("should add two numbers", () => {
expect(add(1, 1)).toBe(2);
expect(add(1, -4)).toBe(-3);
});
테스트가 통과 됐다면 초록색 글씨로 다음과 같이 나옵니다.
실패 했다면 빨간색으로 다음과 같이 표시됩니다.
함수를 만들고 싶은데 이 함수는 다음의 두 가지 조건을 지켜야합니다.
1. 두 매개변수의 값을 더해준다
2. 오직 number 타입의 매개변수만 받아야 한다
먼저 두 조건을 만족하는 테스트를 작성해 봅시다.
describe("add", () => {
it("should add two numbers", () => {
expect(add(1, 2)).toBe(3);
});
it("should only add numbers ", () => {
expect(add(2, "2")).toBe(undefined);
expect(add(2, {})).toBe(undefined);
expect(add(2, [])).toBe(undefined);
});
});
이제 완성한 테스트 코드를 준수하는 코드를 작성해봅시다.
export const add = (x, y) => {
if (typeof x === "number" && typeof y === "number") {
return x + y;
}
};
이와같이 테스트를 먼저 작성하고 그 조건에 맞춰서 코드를 작성하는 것을 Test-driven development(테스트 주도 개발)이라고 합니다.
Jest를 사용한 자바스크립트 단위 테스트와 TDD의 기본을 알아 보았습니다. 다음 포스트에서는
자주 사용되는 Matcher와 async 데이터를 테스트 하는 법을 알아 보겠습니다.