🧪 MyZubsterGateway API 테스트하기 – 단계별 가이드
요약
MyZubsterGateway API의 예약 엔드포인트를 검증하기 위한 자동화된 테스트 구축 과정을 단계별로 설명합니다. Jest와 Supertest를 활용하여 API의 다양한 HTTP 메서드에 대한 테스트를 구현하는 방법을 다룹니다.
핵심 포인트
- Jest와 Supertest를 이용한 API 자동화 테스트 구현 방법
- 테스트 효율성을 위한 경량화된 테스트용 서버 구성
- 테스트 환경에서의 인증 로직 우회(Bypass) 전략
- 상태 코드 및 데이터 유효성 검증을 통한 API 신뢰성 확보
테스트는 신뢰할 수 있는 소프트웨어를 구축하는 데 있어 가장 중요한 부분 중 하나입니다. 이 글에서는 제가 MyZubsterGateway API에 자동화된 테스트를 어떻게 추가했는지, 그리고 이것이 프로젝트에 왜 중요한지에 대해 단계별로 설명하겠습니다.
🎯 우리가 달성한 것
우리는 방금 중요한 작업 하나를 완료했습니다. 바로 MyZubsterGateway API의 예약 엔드포인트(booking endpoints)를 위한 자동화된 테스트를 추가한 것입니다. 이는 우리 GitHub 저장소의 issue #5였습니다.
📚 배우게 될 내용
테스트가 중요한 이유
Jest와 Supertest를 사용하여 API 테스트를 작성하는 방법
...
🛠️ 사용된 기술
기술 | 용도
Jest | 테스트 프레임워크 (Testing framework)
Supertest | API 테스트를 위한 HTTP 단언 (HTTP assertions)
Express | API를 위한 웹 프레임워크 (Web framework)
Node.js | 런타임 환경 (Runtime environment)
📁 우리가 만든 것
- 예약을 위한 테스트 파일 (tests/bookings.test.js)
이 파일에는 모든 예약 관련 엔드포인트에 대한 테스트가 포함되어 있습니다:
javascript
const request = require('supertest');
const app = require('../server.test');
describe('Bookings API', () => {
// GET /api/bookings에 대한 테스트
// POST /api/bookings에 대한 테스트
// GET /api/bookings/:id에 대한 테스트
// PUT /api/bookings/:id에 대한 테스트
// DELETE /api/bookings/:id에 대한 테스트
});
- 테스트를 위한 간소화된 서버 (server.test.js)
전체 프로덕션 서버를 로드하는 대신, 테스트에 필요한 라우트(routes)만 포함하는 경량 버전을 만들었습니다:
javascript
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());
app.use(express.json());
const bookingRoutes = require('./routes/bookings');
app.use('/api/bookings', bookingRoutes);
module.exports = app;
- 테스트를 위한 인증 우회 (Authentication Bypass)
테스트 중에 매번 로그인해야 하는 번거로움을 피하기 위해, 특정 환경 변수(environment variable)를 확인하도록 routes/bookings.js 파일을 수정했습니다:
javascript
const auth = (req, res, next) => {
if (process.env.NODE_ENV === 'test') {
return next(); // 테스트 중에는 인증을 건너뜁니다 (Skip authentication during tests)
}
// ...일반적인 인증 로직
};
📋 우리가 추가한 테스트
| 테스트 | 검증 내용 |
| :--- | : |
| GET /api/bookings | 200 상태 코드와 배열을 반환함 |
| POST /api/bookings | 새로운 예약을 생성하고 201을 반환함 |
| POST /api/bookings (invalid) | 필수 필드가 누락된 경우 400을 반환함 |
| GET /api/bookings/:id | 올바른 예약 상세 정보를 반환함 |
| GET /api/bookings/:id (not found) | 예약이 존재하지 않으면 404를 반환함 |
| PUT /api/bookings/:id | 예약을 업데이트하고 200을 반환함 |
| PUT /api/bookings/:id (not found) | 예약이 존재하지 않으면 404를 반환함 |
| DELETE /api/bookings/:id | 예약을 삭제하고 204를 반환함 |
| DELETE /api/bookings/:id (not found) | 예약이 존재하지 않으면 404를 반환함 |
🚀 테스트 실행 방법
# 프로젝트 디렉토리로 이동
cd ~/MyZubsterGateway
# 테스트 모드를 활성화하여 테스트 실행
NODE_ENV=test npm test -- tests/bookings.test.js
예상 출력:
PASS tests/bookings.test.js
Bookings API
GET /api/bookings
✓ should return 200 and an array of bookings (38 ms)
POST /api/bookings
✓ should create a new booking and return 201 (29 ms)
✓ should return 400 if required fields are missing (4 ms)
...
Test Suites: 1 passed, 1 total
Tests: 9 passed, 9 total
🧠 이것이 중요한 이유
테스트가 추가적인 작업처럼 보일 수 있지만, 다음과 같은 엄청난 이점을 가져다줍니다:
버그 감소 – 문제가 프로덕션(Production) 환경에 도달하기 전에 잡아낼 수 있습니다.
빠른 개발 – 테스트가 회귀(Regression)를 잡아낼 것이라는 확신을 가지고 자신 있게 변경 사항을 적용할 수 있습니다.
...
🐙 다음 단계
예약(Booking) 테스트가 마련되었으므로, 이제 다음을 수행할 수 있습니다:
다른 엔드포인트(Endpoints)에 대한 테스트 추가 – 사용자(Users), 주문(Orders), 결제(Payments) 등.
CI/CD 설정 – 모든 풀 리퀘스트(Pull Request) 시 자동으로 테스트를 실행.
...
🔗 리소스
GitHub Repository: DanielIoni-creator/MyZubsterGateway
Jest Documentation: https://jestjs.io/
...
📬 저와 소통하세요
테스트, Node.js, 또는 MyZubster 프로젝트에 관심이 있다면 함께 소통해요!
📖 Dev.to: https://dev.to/danielioni
🐦 Twitter: https://x.com/myzubster
...
MyZubster 커뮤니티를 위해 ❤️를 담아 제작되었습니다.
🚀 테스트는 단순히 버그를 찾는 것만이 아닙니다 – 그것은 신뢰를 구축하는 과정입니다. 🎉
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기