많이 사용되고 있는 테스트 도구인 Jest는 Zero Configuration 철학을 가지고 있어 별도의 설정 없이 빠르게 테스트 케이스를 작성할 수 있다.
Jest란 무엇인가?
Jest는 React를 만든 Facebook에서 개발한 테스팅 프레임워크(Testing Framework)이다. Babel, TypeScript, Node, React, Angular, Vue 등을 사용하는 프로젝트에서 작동하며, 프로젝트 내의 별도 설정이 필요 없이 바로 시작할 수 있는 Zero Configuration 철학을 가지고 있다. 테스트 코드의 모양이 직관적이고 문서화가 잘 이루어져 있어 많이 활용되고 있다.
간단한 테스트 해보기
간단히 사용해보기 위해 작은 프로젝트 디렉터리를 만들고 Jest를 설치해 보았다.
$ npm init -y # default package.json 생성
Wrote to ~/jest-tutorial/package.json:
{
"name": "jest-tutorial",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
> npm install jest --save-dev # jest 설치
Jest를 설치한 후 package.json
의 test scripts를 jest로 수정한다.
{
"name": "jest-tutorial",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "jest" // 다음과 같이 수정
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"jest": "^29.2.1"
}
}
디렉터리에 테스트 대상이 될 함수 funcAdd.js
를 생성했다.
const funcAdd = {
// 두 개의 인수를 받아 그 합을 리턴
add: (num1, num2) => num1 + num2,
}
module.exports = funcAdd // 테스트 파일에서 사용할 수 있도록 내보내기
함수 파일 작성을 마쳤다면 이제 테스트 파일을 작성할 차례다. funcAdd.test.js
를 만들고 테스트 코드를 다음과 같이 작성하였다.
const funcAdd = require("./funcAdd") // funcAdd 불러오기
test("1 = 1", () => {
expect(1).toBe(1) // expect: 검증값 , toBe: 기대값
})
test("2 + 3 = 5", () => {
expect(funcAdd.add(2, 3)).toBe(5) // funcAdd.add 성공 케이스
})
test("3 + 3 = 5", () => {
expect(funcAdd.add(3, 3)).toBe(5) // funcAdd.add 실패 케이스
})
npm test
를 실행하여 테스트 결과를 확인해보자. npm test
는 프로젝트 내에서 ~.test.js
와 같은 형식으로 되어 있거나, __tests__
디렉터리 안에 있는 모든 파일을 테스트 파일로 인식하고 테스트를 실행시킨다.
$ npm test
> jest-tutorial@1.0.0 test
> jest
FAIL ./funcAdd.test.js
✓ 1 => 1 (1 ms)
✓ 2 + 3 = 5
✕ 3 + 3 = 5 (1 ms)
● 3 + 3 = 5
expect(received).toBe(expected) // Object.is equality
Expected: 5
Received: 6
10 |
11 | test("3 + 3 = 5", () => {
> 12 | expect(funcAdd.add(3, 3)).toBe(5);
| ^
13 | });
14 |
at Object.toBe (funcAdd.test.js:12:29)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 2 passed, 3 total
Snapshots: 0 total
Time: 0.189 s
Ran all test suites.
아래 Tests
에서 총 3개 중 2개 성공, 1개 실패했음을 확인할 수 있다.
세 번째 테스트 함수를 아래처럼 변경하여 테스트를 진행해볼 수도 있다.
test("3 + 3 ≠ 5", () => {
expect(funcAdd.add(3, 3)).not.toBe(5) // not을 사용
})
$ npm test
> jest-tutorial@1.0.0 test
> jest
PASS ./funcAdd.test.js
✓ 1 => 1 (1 ms)
✓ 2 + 3 = 5 (1 ms)
✓ 3 + 3 ≠ 5
Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 0.166 s, estimated 1 s
Ran all test suites.
이처럼 Jest는 여러가지 방법으로 값을 테스트할 수 있게 다양한 matchers
를 지원한다.
Reference
Jest로 기본적인 테스트 작성하기 | Engineering Blog by Dale Seo