TDD는 다음 개발과정을 얘기한다.
- 테스트를 작성한다. (테스트 실패)
- 코드를 작성한다. (테스트성공)
- 리팩토링한다.
리팩토링 과정은 TDD의 핵심이라고 볼 수 있는데, 리팩토링을 통해 테스트코드가 가지는 의존성을 최소화하는데 집중한다.
TDD를 통한 목표는 테스트로 개발을 이끌어가는 것이다. 이를 통해 다음의 이점을 가질 수 있다.
Jest는 자바스크립트의 테스트 프레임워크이다.
NodeJS의 TDD강의를 보면 대부분 jest를 사용하고 있고, nestJS에 내장된 테스트 프레임워크도 jest이다.
npm install --save-dev jest
설치가 끝나면 다음 스크립트를 추가해서 npm run test
로 테스트가 동작되도록 한다.
{
"scripts": {
"test": "jest"
}
}
그리고 jest --init
으로 jest의 기본 구성파일을 생성한다.
test.js파일을 만들어서 다음 코드를 작성한다.
test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});
그리고 npm run test
를 명령하면 테스트코드가 동작하고 하나의 테스트가 성공했음을 보여준다.
it('객체 필드 값 확인', () => {
const data = {one: 1};
data['two'] = 2;
expect(data).toEqual({one: 1, two: 2});
});
위 코드는 toBe
를 사용하지 않는다. object의 경우 toBe
를 사용하면 주소를 비교해서 테스트에 실패한다. 이럴 땐 toEqual
을 통해 검사하면 재귀적으로 모든 필드를 검사한다.
jest는 이와 같이 다양한 매처가 있으므로 공식문서에서 확인해서 가장 유용한 것을 사용하도록 한다.