TDD
Unit Test - Jest (Getting Started)
About Unit Test 🥸
1. Test Libraries
1-1. 테스트 코드를 수행하는 역할 ⇒ Test Runner
- 테스트를 실행 후 결과 생성
- Mocha 등의 라이브러리가 있다.
1-2. 테스트 코드 안에서 결과값이 참인지 거짓인지, 예상하는 값과 실제의 값이 같은지를 비교 ⇒ Assertion
- 테스트 조건, 비교를 통한 테스트 로직
- Chai, sepect.js, better-assert 등의 라이브러리가 있다.
하지만 Test를 실행하는 라이브러리 따로, Assertion을 위한 라이브러리 따로 조합해서 사용하는 게 베스트 프랙티스일까? 놉. 한가지 좋은 소식은 요즘에는 Jest라는 라이브러리를 사용하여 간편하게 테스트를 수행하고 테스트 로직 또한 작성이 가능하다.
2. JEST 🥸
Jest is a delightful Javascript Testing Framework with a focus on simplicity.
2-1. Jest 설치 및 환경설정
1. 전역적으로 jest 설치
yarn global add jest // 글로벌적으로 jest를 설치함으로써 jest의 커맨드를 어디서나 사용할 수 있게끔
2. 개발환경에 따른 jest 설치
yarn add -dev jest @types/jest
3. jest.config.js 파일 및 test파일 생성
jest -init // jest.config.js 파일을 생성한다.
파일명.test.js // 이러한 형식으로 파일을 생성하면 jest가 알아서 test 파일을 실행시켜준다. test 폴더를 새로 하나 만들고 그 안에 test 파일들을 생성하는 것을 권장함.
2-2. Getting Started
Jest를 이해하기 위한 간단한 예제로, sum함수를 만들고 이를 테스트하는 코드를 작성해본다.
// sum.js function sum(a, b) { return a + b; } module.export = sum;
// sum.test.js const sum = require("../add.js"); test('adds 1 + 2 to equal 3', () => { // 테스트 코드 작성 expect(sum(1, 2)).toBe(3); })
이렇게 코드를 작성했다면. 이제 코드를 테스팅 해볼 수 있다.
yarn test
yarn test를 입력하면 test가 자동으로 실행된다.

몇 개의 테스트가 패스되었는지와 커버리지에 대한 정보, 그리고 총 테스팅 시간에 대해 자세히 표시된다.
위처럼 자세하게 나오는 것은 jest.config.js에 설정된 collectCoverage가 true 이기 때문인데, 이를 만약 false로 바꾸게 된다면 성공하거나 실패한 간략한 정보만 나오게 된다. 혹은 내가 원할때만 자세한 정보 표시를 원한다면 collectCoverage는 false로 주고, jest --coverage를 입력하면 입력한 때에만 자세한 정보가 표시된다.
- 나는 마지막 방법이 가장 편한 듯 싶다.
자동 환경 설정
만약 우리가 코드를 수정할 때마다 테스트 코드를 자동으로 실행하고 싶다면 이 방법을 적용시켜보자.
// package.json { "name": "unit-test", ..., ..., "scripts": { "test": "jest --watchAll" }, ..., ..., }
package.json의 파일에서 test의 부분을 위와 같이 —watchAll 옵션을 붙여주면 파일이 변경될 때마다 다시 테스트 코드가 실행된다.
다만 프로젝트 규모가 거대하다면, 이러한 옵션을 붙여주는 것은 오히려 꽤나 번거로울 수 있다. 따라서 이미 커밋이 되고 아무런 변경사항이 없는 테스트 코드들은 그대로 놔두고, 현재 활발하게 수정되고 있는 파일들에 대해서만 그에 맞는 테스트 코드를 실행하게 하고 싶다면 다음과 같이 설정을 해주자.
1. Just watch, not watchAll
// package.json { "name": "unit-test", ..., ..., "scripts": { "test": "jest --watch" }, ..., ..., }
--watchAll 대신, --watch를 사용한다.
2. git은 필수
git init을 통해서든 아니든, git repo에 커밋이 된 사항들에 대해서만 jest가 인지를 하고 변경사항의 유무를 판단하기 때문에, git이 초기화되있는 상태이여야 한다.
여기까지 기본적인 Jest 환경을 세팅하는 법에 대하여 알아보았다. 다음 포스팅에서는 Jest에 대해서 좀 더 깊숙이 알아보자.
# Jest# TDD# UnitTest