TDD란 Test Driven Development의 약자로 ‘테스트 주도 개발’이라고 합니다.
개발을 할 때, 규모가 작을 땐 직접 플레이드라운드에 들어가서 코드가 잘 돌아가는지 하나하나 체크 할 수 있지만 기능이 많아지면 헷갈리면서 실수를 할 수 있게 됩니다.
쉽게 말해서 내가 짠 코드를 테스트 하기 위해 코드로 테스트하는 것을 TDD라고 합니다.
자바스크립트에서 테스트 코드를 작성하는 것을 도와주는 여러가지 프레임워크들이 있지만, 저는 Nestjs를 쓰고 있으므로 Nestjs에서 기본 테스트 프레임워크로 지원하고 있는 Jest에 대해 써보겠습니다.
// test.spec.ts
describe('test', () => {
beforeEach(() => {
// 서비스 코드를 실행하기 이전에 필요한 로직들
});
it('serviceToTest', () => {
// 서비스 코드
const result = true; // 가정
expect(result).toBe(true);
});
});
package.json을 보게 되면 jest가 자동으로 깔려있고 jest안에 "testRegex": ".*\.spec\.ts$" 라는 구간을 보면 spec이 적혀있는 파일을 test파일로 읽고 있습니다.
Nestjs 폴더를 만들면 기본으로 있는 app.controller.spec.ts를 보면 구조가 대충 보입니다.
Jest는 다른 라이브러리 설치 없이 바로 mock 기능을 지원합니다.
mocking은 단위 테스트를 작성할 때 해당 코드가 의존하는 부분을 가짜로 대체하는 기법입니다. 보통 테스트하려는 코드가 의존하는 부분을 직접 생성하기 너무 부담스러운 경우 mocking을 많이 사용합니다.
mocking은 실제 객체인 척하는 가짜 객체를 생성하는 매커니즘입니다. 테스트가 실행되는 동안 객체가 호출되거나, 어떤 아웃풋을 반환하는지 등을 기억할 수 있기 때문에 어떻게 사용되는 지 검증이 가능합니다. mocking을 이용하면 구체적으로 구현해야 하는 실제 객체 사용보다 훨씬 빠르고, 동일한 결과를 내는 테스트를 작성 가능합니다.