이번에 테스트 코드를 작성하게 된 기회가 있어서 기본적인 개념과 과정을 기록 포스팅하고자한다.
테스트 코드란 코드가 안정적이고 제대로 동작하는지 확인하기 위해 작성하는 코드이다. 이를 통해 특정 동작을 하는 코드가 예상과 동일하게 결과를 잘 내는지 품질 검사하는데 사용한다.
이번 테스트 코드를 작성할 때 Javascript Test 프레임워크 중 jest를 사용했다.
우선 프로젝트에 jest를 설치해주었다. 아래의 명령어로 설치할 수 있다.
npm install --save-dev jest
yarn add --dev jest
다음은 package.json 에 scripts test 설정을 해줘야한다.
"scripts": {
"test": "jest",
},
이제
npm test 또는 yarn test
를 통해 테스팅을 실행할 수 있다.
특정 경로에서 파일 이름(확장자 포함)만 추출해내는 함수 getFileName 이 있다고 가정하자.
-src
-getFileName.js
-getFileName.spec.js (-> 테스트 파일)
현재 간단히 파일 구조는 이렇다.
getFileName.js에 대한 테스트 코드를 작성해보았다.
getFileName.spec.js
import getFilename from "./getFileName";
test('utils.getFilename', () => {
expect(getFilename('bin/abc.js')).toBe('abc.js');
})
우선 큰 테스트 코드 구조는 아래와 같다.
test('테스트 코드명', () => {
expect(실행값).toBe(기댓값);
})
코드를 해석해보자면 getFilename('bin/abc.js')의 결과값이 'abc.js'가 되는지 테스트 하는 것이다.
참고로 여기서 .toBe() 는 기댓값을 나타날때 쓰는 Jest가 제공하는 Matcher 함수들 중 하나이다.
아래에서 더 많은 Matcher 함수들을 알아보자.
.toBe()
숫자나 문자와 같은 객체가 아닌 기본형 값을 비교할 때 사용한다.
.toEqual()
객체 단위를 비교할 때 사용한다.
.toBeTruthy() .toBeFalsy()
true(1)인지 false(0)인지 비교한다.
expect(0).toBeFalsy();
.toHaveLength()
배열의 길이를 확인할 때 사용한다.
.toContain()
배열이 특정원소를 담고 있는지 검사할 때 사용한다.
const numbers = ['a', 'b', 'c', 'd'];
expect(numbers).toHaveLength(4);
expect(numbers).toContain('b');
.toMatch()
일반 문자열이 아닌 정규식 기반의 테스트를 할 때 사용한다.
expect(getEmail('gggg@naver.com'))
.toMatch(/.*naver.com$/);