Node.js-TDD(테스트 주도 개발)
TDD
- .sepc.js 파일은 테스트코드를 의미한다.
- 모카 (mocha)
- 모카란? 테스트 코드를 돌려주는 테스트 러너 (노드가 돌려주는 것이 아님.)
- 테스트 수트 : 테스트 환경으로 모카에서는 describe()으로 구현한다.
- 테스트 케이스 : 실제 테스를 말하며 모카에서는 it()으로 구현한다.
- assert는 쓰지말라고 node공식문서에 나와있다.
- 단위 테스트 : 함수 하나하나의 기능 테스트 ()
- 통합 테스트 : API의 기능 테스트
- superTest는 express용 통합 테스트 라이브러리이다.
- 내부적으로 익스프레스 서버를 구동시켜 실제 요청을 보낸뒤 결과를 검증한다
- superTest 에서 .expect()상태코드예상할 때 쓴다.
-
mocha가 내부적으로 서버를 구동시켜주기때문에 기존에 app.js에서 app.listen으로 구동시켜주던 코드를 bin/www.js로 빼고 npm start는 nodemon bin/www로 돌리고 npm test할 때 request(app)은 더 이상 서버돌리는 코드가 없어지고 순수하게 mocha가 서버를 돌릴 수 있게 된다.
-
api를 만들 때 순서 - 테스트코드→비즈니스로직→라우터
- 테스트 코드
import app from "../app"
import request from "supertest"
import should from "should"
import {describe, it} from "mocha";
describe('POST api/apply/:postId 요청은 ', ()=>{
describe('성공 시', ()=>{
let post = {
title : "요거프레소",
workingDate : "2019-09-30",
workingTime : "14:00-17:00",
pay : "70000",
address : "경기도 파주시 영어마을대로 14길",
dueDate : "2019-09-30",
description : "추억의 카페",
category : "RESTAURANT"
};
let body;
before((done)=>{
request(app)
.post("/api/post/createPost")
.send(post)
.expect(201)
.end((err, res)=>{
body = res.body;
done();
});
});
it('id라는 속성을 가지고 있어야한다.', function () {
body.should.have.property("id")
});
it('입력한 title을 반환해야한다.', function () {
body.should.have.property("title", "요거프레소")
});
});
describe('실패 시', ()=>{
it('title 파라미터가 누락되었을 시 400을 응답해야한다.', (done)=> {
request(app)
.post("/api/post/createPost")
.send({})
.expect(400)
.end(done)
});
it('title 파라미터가 중복일 경우 409을 응답해야한다.', (done)=> {
request(app)
.post("/api/post/createPost")
.send({title:"요거프레소"})
.expect(409)
.end(done)
});
})
});
댓글남기기