TDD 북스터디를 진행하며 실습 개념으로 라이브 코딩을 하게 되었는데, 이때 Jest를 사용하여 테스트 케이스를 작성하게 되었습니다. 문제는 Jest를 사용해 본 경험도 없었고, 테스트 케이스를 작성하는 행위도 거의 해본적이 없어 코딩을 하는 시간보다 헤매는 시간이 훨씬 많았습니다.
모르는 것은 차근차근 배워나가자는 마음으로 테스트 프레임워크인 Jest의 기본적인 사용법을 정리해보았습니다.
설치
npm 명령어를 통해 jest를 설치해줍니다.
npm install --save-dev jest
또는 yarn을 사용하셔도 좋습니다. 공식문서에서는 yarn을 사용하기 때문에 yarn으로 설치하시는 것을 권장드리지만, 어떤걸 사용하셔도 상관없습니다.
yarn add --dev jest
준비
먼저 테스트 할 대상의 기능을 모듈로 익스포트 해줍니다.
function double(number) {
return number * 2;
}
module.exports = double;
그 다음 테스트를 위한 파일을 하나 만들고, 방금 익스포트했던 모듈을 임포트하여 테스트합니다.
const double = require('../main/double');
test('2 * 2 to be 4', () => {
expect(double(2)).toBe(4);
});
마지막으로 package.json에서 "script" { "test" } 에 jest를 입력해주면 테스트 준비가 끝납니다.
{
"scripts": {
"test": "jest"
}
}
실행
터미널에서 test를 실행해줍니다.
yarn test // if you use 'yarn'
npm run test // if you use 'npm'
생각보다 간단했네요. 처음 해보는 것이라 생소했을뿐 너무 어렵게 생각할 필요는 없었던 것 같습니다.
테스팅 명령어
테스트에 사용되는 명령어(Matcher)들입니다. toBe() 이외에도 유용한 명령어들이 많으니 문서를 참고하셔서 사용해보시면 좋을 것 같네요.
toBe(a) // 예상한 값이 매개변수와 같은 값일 것인지 확인합니다.
toEqual(obj) // 매개변수(객체)와 같은 값일 것이라 예상합니다. 객체가 가진 값의 비교가 가능합니다.
not.toBe(a) // 뒤의 결과를 부정하는 값과 비교합니다.
toBeNull() // 예상한 값이 null 인지 확인합니다.
toBeUndefined() // 예상한 값이 undefined 인지 확인합니다.
toBeDefined() // 예상한 값이 undefined 가 아닌지 확인합니다.
toBeTruthy() // 예상한 값이 truthy 한 값인지 확인합니다.
toBeFalsy() // 예상한 값이 falsy 한 값인지 확인합니다.
toBeGreaterThan(number); // number보다 큰 값인지 확인합니다.
toBeGreaterThanOrEqual(number); // number보다 크거나 같은 값인지 확인합니다.
toBeLessThan(number); // number보다 작은 값인지 확인합니다.
toBeLessThanOrEqual(number); // number보다 작거나 같은 값인지 확인합니다.
toBeCloseTo(float) // float인 매개변수와 같은 값인지 확인합니다. 부동소수점 에러를 해결하기 위해 고안되었습니다.
toMatch(string) // string을 포함하는 문자열인지 확인합니다.
toContain('item') // item을 포함하는 배열(iterator)인지 확인합니다.
toThrow() // 예외를 발생시키는지 확인합니다.
여기까지 Jest의 기본적인 사용 방법에 대해 알아보았습니다.
자세한 내용은 Jest 공식 문서를 참고해주세요.
반응형
'이론 > Frontend' 카테고리의 다른 글
JavaScript의 스코프 - 2 (Scope of JavaScript) (0) | 2021.05.03 |
---|---|
JavaScript의 스코프 - 1 (Scope of JavaScript) (0) | 2021.04.11 |
JavaScript의 문법 (Grammar of JavaScript) (0) | 2021.03.30 |
JavaScript의 강제변환 - 3 (Coercive Type Conversion of JavaScript) (0) | 2021.03.09 |
JavaScript의 강제변환 - 2 (Coercive Type Conversion of JavaScript) (0) | 2021.03.05 |
댓글