(수근수근)
TDD 로 하는 API 서버 개발 -(1) 본문
.해당 내용은 인프런의 '테스트주도개발(TDD)로 만드는 NodeJS API 서버'를 정리한 내용입니다.
사용자 목록 조회 API 테스트 코드 만들기
🔶 GET users 코드
[ API SPEC ]
- 성공
- 유저 객체를 담은 배열로 응답한다
- 최대 limit 갯수만큼 응답한다
- 실패
- limit이 숫자가 아니면 400을 응답한다
- offset이 숫자가 아니면 400을 응답한다
app.get('/users', function (req, res) {
const limit = req.query.limit;
res.json(users.slice(0,limit));
});
🔶 GET users TEST 성공
- 유저 객체를 담은 배열로 응답한다
const app = require('./index');
const should = require('should');
const request = require('supertest');
describe('GET /users는 ', () =>{
describe('성공시', ()=>{
it('유저 객체를 담은 배열로 응답한다',(done)=>{
request(app)
.get('/users')
.end((err, res)=>{
// 받은 배열 값을 검증한다
res.body.should.be.instanceOf(Array);
done();
})
})
})
})
- 최대 limit 갯수만큼 응답한다
it('최대 limit갯수만큼 응답한다', (done) => {
request(app)
.get('/users?limit=2')
.end((err, res) => {
res.body.should.have.lengthOf(2);
done();
})
})
→ 결과
🔶 GET users 코드 (실패)
app.get('/users', function (req, res) {
req.query.limit = req.query.limit || 10 ;
const limit = parseInt(req.query.limit,10);
if(Number.isNaN(limit)){
//end()함수로 응답을 진행해준다.
return res.status(400).end();
}
res.json(users.slice(0,limit));
});
🔶 GET user TEST 실패
- imit이 숫자가 아니면 400을 응답한다
- offset이 숫자가 아니면 400을 응답한다
describe('실패시', ()=>{
it('limit이 숫자가 아니면 400을 응답한다',(done)=>{
request(app)
.get('/users?limit=two')
.expect(400) //400응답 값을 기대한다.
.end(done);
})
})
→ 결과
사용자 조회 API 성공시 - GET /user/:id
- 성공
- id가 1인 유저 객체를 반환한다.
- 실패
- id가 숫자가 아닐 경우 400으로 응답한다.
- id로 유저를 찾을 수 없는 경우 404로 응답한다.
🔶 GET users/:id 코드
app.get('/users/:id', function(req, res){
const id = parseInt(req.params.id, 10) //10진법
const user = users.filter((user)=> user.id === id)[0];
res.json(user);
});
🔶 GET users/:id 테스트 코드
describe('GET users/1는 ', () =>{
describe('성공시', () =>{
it('id가 1인 유저 객체를 반환한다',(done) =>{
request(app)
.get('/users/1')
.end((err, res) => {
//첫번째 파라미더 기대하는 ID ,
//두번째 파리미터 기대하는 값
res.body.should.have.property('id', 1);
done();
})
})
})
})
→ 결과
사용자 조회 API 실패시 - GET /user/:id
🔶 실패에 대한 처리를 한 GET users/:id 코드
app.get('/users/:id', function(req, res){
const id = parseInt(req.params.id, 10) //10진법
if(Number.isNaN(id)) return res.status(400).end();
const user = users.filter((user)=> user.id === id)[0];
if(!user) return res.status(404).end();
res.json(user);
});
🔶 실패에 대한 GET users/:id 테스트 코드
describe('실패시', ()=>{
it('id가 숫자가 아닐경우 400으로 응답한다', (done)=>{
request(app)
.get('/users/one')
.expect(400)
.end(done)
});
it('id로 유저를 찾을 수 없을 경우 404로 응답한다',(done)=>{
request(app)
.get('/users/999')
.expect(404)
.end(done)
});
})
→ 결과
NPM 테스트 스크립트
기존에는 D:\start-node-api\apiserver\node_modules\.bin>mocha ..\..\index.spec.js
이렇게 테스트 코드를 실행하였다. 이제는 script를 등록해서 편하게 실행해보자
Script추가
"scripts": {
"test": "mocha index.spec.js"
}
→ 결과
cmd 창에 D:\start-node-api\apiserver>npm test
을 입력한다.
mocha의 위치를 지정하지 않아도 자동으로 설정이 된다.
'type & Javascript' 카테고리의 다른 글
[JS]동기와 비동기 (0) | 2021.11.17 |
---|---|
TDD로 하는 API 서버 개발 -(2) (0) | 2021.10.16 |
[NodeJS]테스트 주도개발 (0) | 2021.10.03 |
[NodeJS] REST API란 (0) | 2021.10.03 |
[ NodeJS ] Express 기초 (0) | 2021.10.03 |
Comments