(수근수근)
TDD로 하는 API 서버 개발 -(2) 본문
.해당 내용은 인프런의 '테스트주도개발(TDD)로 만드는 NodeJS API 서버'를 정리한 내용입니다.
사용자 삭제 API 성공시 - DELETE /users/:id
- 성공시
204를 응답한다 - 실패시
id가 숫자가 아닐 경우 400으로 응답한다
📕 DELETE /users/:id 성공시 코드
app.delete('/users/:id', (req, res) =>{
const id = parseInt(req.params.id, 10);
users = users.filter(user => user.id !==id);
res.status(204).end();
})
🧩 DELETE /users/:id 성공시 테스트 코드
describe('Delete /users/1', ()=>{
describe('성공시', ()=>{
it('204를 응답한다',(done)=>{
request(app)
.delete('/users/1')
.expect(204)
.end(done);
})
})
})
→ 결과
📕 DELETE /users/:id 실패시 코드
app.delete('/users/:id', (req, res) =>{
const id = parseInt(req.params.id, 10);
if(Number.isNaN(id)) return res.status(400).end();
users = users.filter(user => user.id !==id);
res.status(204).end();
})
🧩 DELETE /users/:id 실패시 테스트 코드
describe('실패시', () =>{
it('id가 숫자가 아닐경우 400으로 응답한다',done =>{
request(app)
.delete('/users/one')
.expect(400)
.end(done);
})
})
→ 결과
사용자 정보 수정 API - POST
- 성공
201 상태코드를 반환한다.
생성된 유저 객체를 반환한다
입력한 name을 반환한다 - 실패
name 파라미터 누락시 400을 반환한다
name이 중복일 경우 400을 반환한다
📕 사용자 추가 API 성공시 코드
app.post('/users', (req, res) =>{
//express는 body를 지원하지 않음.(4버전 이하, 4이상 부터는 지원한다.)
//bodyparser 필요
const name = req.body.name;
const id = Date.now();
const user = {id, name};
users.push(user);
res.status(201).json(user);
})
🧩 사용자 추가 API 성공시 테스트 코드
describe('POST /users',()=>{
describe('성공시',() =>{
let name = 'daniel'
let body;
//테스트가 동작하기 전에 미리 실행
before(done => {
request(app)
.post('/users')
.send({name})
.expect(201)
.end((err,res) =>{
body = res.body;
done();
});
})
it('생성된 유저 객체를 반환한다', () => {
body.should.have.property('id');
});
it('입력한 name을 반환한다', () => {
body.should.have.property('name', name)
})
})
})
→ 결과
📕 사용자 추가 API 실패시 코드
app.post('/users', (req, res) =>{
//express는 body를 지원하지 않음.
//bodyparser 필요
const name = req.body.name;
if(!name) return res.status(400).end();
//중복된 데이터인지 확인
const isConflict = users.filter(user => user.name === name).length;
if(isConflict) return res.status(409).end();
const id = Date.now();
const user = {id, name};
users.push(user);
res.status(201).json(user);
})
🧩 사용자 추가 API 실패시 테스트 코드
describe('실패시',()=>{
it('name파라미터를 누락시 400을 반환한다',(done)=>{
request(app)
.post('/users')
.send({})
.expect(400)
.end(done)
})
it('name이 중복일 경우 409을 반환한다', (done) =>{
request(app)
.post('/users')
.send({name :'세하'})
.expect(409)
.end(done)
})
})
→ 결과
사용자 정보 수정 API - POST
- 성공
변경된 name을 응답한다 - 실패
정수가 아닌 id인 결우 400 응답
name이 없을 경우 400 응답
없는 유저인 경우 404 응답
이름이 중복일 경우 409 응답
📕 사용자 정보 수정 API 성공시 코드 - 'PUT /users/:id'
app.put('/users/:id', (req, res) =>{
const id = parseInt(req.params.id , 10);
const name = req.body.name;
const user = users.filter(user => user.id === id)[0];
user.name = name;
res.json(user);
})
🧩 사용자 정보 수정 API 성공시 테스트코드 - 'PUT /users/:id'
describe('PUT /users/:id', () => {
describe('성공시', () => {
it('변경된 name을 응답한다', (done) => {
const name = '심민하';
request(app)
.put('/users/3')
.send({name})
.end((err, res) => {
res.body.should.have.property('name',name);
done();
});
})
})
})
→ 성공
📕 사용자 정보 수정 API 실패시 코드 - 'PUT /users/:id'
app.put('/users/:id', (req, res) =>{
const id = parseInt(req.params.id , 10);
//id가 정수인지 아닌지
if(Number.isNaN(id)) return res.status(400).end();
const name = req.body.name;
// 실패 테스트 - 이름이 없는 경우
if(!name) return res.status(400).end();
//user 중복이 되는지 확인
const isConfilct = users.filter(user => user.name === name).length;
if(isConfilct) return res.status(409).end();
const user = users.filter(user => user.id === id)[0];
if(!user) return res.status(404).end();
user.name = name;
res.json(user);
})
🧩 사용자 정보 수정 API 실패시 테스트 코드 - 'PUT /users/:id'
describe('실패시', ()=>{
it('정수가 아닌 id인 경우 400을 응답한다', done=>{
request(app)
.put('/users/one')
.expect(400)
.end(done);
})
it('name이 없을 경우 400을 응답한다', done=>{
request(app)
.put('/users/1')
.send({})
.expect(400)
.end(done);
})
it('없는 유저일 경우', done=>{
request(app)
.put('/users/999')
.send({name:'foo'})
.expect(404)
.end(done);
})
it('이름이 줌복일 경우', done=>{
request(app)
.put('/users/3')
.send({name:'심민하'})
.expect(409)
.end(done);
})
})
→ 결과
'type & Javascript' 카테고리의 다른 글
[JS] 이벤트 시스템 - 이벤트 버블링, 이벤트 캡처링 (0) | 2021.11.17 |
---|---|
[JS]동기와 비동기 (0) | 2021.11.17 |
TDD 로 하는 API 서버 개발 -(1) (0) | 2021.10.14 |
[NodeJS]테스트 주도개발 (0) | 2021.10.03 |
[NodeJS] REST API란 (0) | 2021.10.03 |
Comments