JavaScript 개발자를 위한 Jest 테스트 가이드
테스트는 버그를 조기에 발견하도록 도와줍니다. 코드 품질을 향상시키며, 기존 코드를 망가뜨리지 않고도 새로운 기능을 배포할 수 있게 해줍니다.
Jest는 JavaScript 및 Node.js를 위한 인기 있는 테스트 도구입니다. Meta에서 개발했으며, TypeScript, React, Next.js, Express.js와 함께 사용할 수 있습니다.
왜 Jest를 사용해야 할까요?
- 설정이 거의 필요 없습니다.
- 속도를 위해 테스트를 병렬로 실행합니다.
- 모킹(mocking) 도구를 포함하고 있습니다.
- 코드 커버리지 보고서를 보여줍니다.
- 명확한 에러 메시지를 제공합니다.
Jest 설정 방법:
- Node.js 프로젝트 생성: npm init -y
- Jest 설치: npm install --save-dev jest
- package.json의 scripts에 "test": "jest"를 추가합니다.
- 다음 명령어로 테스트 실행: npm test
간단한 테스트 작성하기:
sum.js 생성: function sum(a, b) { return a + b; } module.exports = sum;
sum.test.js 생성: const sum = require("./sum"); test("adds two numbers", () => { expect(sum(2, 3)).toBe(5); });
필수 Jest 도구:
- Assertions: expect()와 toBe()를 사용하여 값을 검증합니다.
- Objects: toEqual()을 사용하여 객체나 배열을 비교합니다.
- Organization: describe()를 사용하여 관련 테스트를 그룹화합니다.
- Async: Jest는 await를 사용하여 비동기 함수를 자연스럽게 처리합니다.
- Mocks: jest.fn()을 사용하여 함수를 모킹합니다. 이는 실제 API 호출이나 데이터베이스 접근을 피함으로써 테스트 속도를 빠르게 유지해 줍니다.
- Hooks: beforeEach()와 afterEach()를 사용하여 테스트 데이터를 설정하거나 정리합니다.
성공 측정하기:
npx jest --coverage를 실행하여 커버리지 보고서를 확인하세요. 이를 통해 코드의 어느 부분에 테스트가 부족한지 알 수 있습니다.
API 테스트:
API 엔드포인트를 테스트하려면 Supertest를 사용하세요. 실제 서버를 실행하지 않고도 상태 코드를 확인할 수 있습니다.
스냅샷 테스트(Snapshot Testing):
React에서 matchSnapshot()을 사용하세요. 이는 현재 렌더링된 결과와 저장된 버전을 비교하여 예상치 못한 UI 변경 사항을 찾는 데 도움을 줍니다.
권장 사항(Best practices):
- 결과(outcomes)를 설명하는 테스트를 작성하세요.
- 내부 코드 구조를 테스트하는 것은 피하세요.
- 단위 테스트에서 실제 데이터베이스 사용을 피하세요.
- 의미 있는 커버리지에 집중하세요.
Jest를 마스터하면 신뢰할 수 있는 소프트웨어를 구축할 수 있습니다.