테스트 주도 개발
TDD로 개발하자
mocha, should, superTest
TDD 엄밀하게 말해서 100%는 아니다. 테스트코드를 만들고 테스트코드를 통과하는 코드를 만들고 리팩토링하는 싸이클
여기에선 api를 만들고 테스트코드를 만들거나 테스크코드를 만들고 api를 만들거임
Mocha
모카(mocha)는 테스트 코드를 돌려주는 테스트 러너
테스트 꾸러미: 테스트 환경으로 모카에서는 describe()으로 구현한다
테스트 케이스: 실제 테스트를 말하며 모카에서는 it()으로 구현한다
mocha를 사용해보자 npm i mocha --save-dev 로 설치하자
14번줄 스크립트 부분에서 start 부분을 수정했다.
node index.js == npm start 똑같은 명령어
devDependencies 에 mocha가 추가되는걸 확인할 수 있다. 개발 환경에 필요한 모듈
dependencies에 는 express 등등 분류가 되어있음 실제 서비스가 돌아갈때 필요한 모듈
//테스트파일은 파일명에 spec이란 단어를 넣거나 폴더를 만든다
const assert = require('assert') //node 기본 모듈
describe('GET /users', () => {
it('배열을 반환한다', () => {
assert.equal(1, 1);
})
})
성공할 경우
실패할 경우
Should
슈드(should)는 검증(assertion) 라이브러리다
가독성 높은 테스트 코드를 만들 수 있다
npm i should --save-dev
//테스트파일은 파일명에 spec이란 단어를 넣거나 폴더를 만든다
const assert = require('assert') //node 기본 모듈
const should = require('should')
describe('GET /users', () => {
it('배열을 반환한다', () => {
//assert.equal(1, 0);
(1).should.equal(1)
})
})
일반적인 유니테스트 단위테스트가 아님
하나의 함수를 테스트하는게 아님
여러개의 함수로 이루어진하나의 API기능을 테스트 -> 통합적인 테스트가 필요
그래서 !!
SuperTest
npm install supertest --save-dev
지금 까지는 우리가 서버를 개발하고 실제로 curl을 날려서 확인하는 작업이였지만,
이제 supertest를 활용해서 자동화하는거임
express.js 서버코드와 index.spec.js 파일을 수정하자
app을 exports 해주자 앱을 외부에서도 사용할수있게 해야한다. 즉 슈퍼테스트에서 사용할수 있게 해야함
그리고 리슨을 잠시 꺼두자. 왜냐면 슈퍼테스트에서 앱을 자동으로 리슨상태로 만들꺼다.
express.js
const express = require('express')
const app = express()
const port = 3000
const users = [{name : 'Alice'}]
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.get('/users', (req, res)=> {
res.send(users);
})
//app.listen(port, () => {
// console.log(`Example app listening at http://localhost:${port}`)
//})
module.exports = app
index.spec.js
const assert = require('assert') //node 기본 모듈
const should = require('should')
const request = require('supertest')
const app = require('./express') //express 파일에서 가져옴
describe('GET /users', () => {
it('배열을 반환한다', () => {
//assert.equal(1, 0);
(1).should.equal(1)
})
})
이제 준비는 다됬고 실제로 슈퍼테스트를 사용해서 자체적으로 서버를 뛰우고 요청을 하고 응답을 하는 테스트코드를 작성해보겠다.
//테스트파일은 파일명에 spec이란 단어를 넣거나 폴더를 만든다
const assert = require('assert') //node 기본 모듈
const should = require('should')
const request = require('supertest')
const app = require('./express') //express 파일에서 가져옴
describe('GET /users', () => {
it('배열을 반환한다', (done) => {
request(app)
.get('/users')
.end((err, res) => {
res.body.should.be.instanceof(Array) //응답값이 배열이여야한다
res.body.forEach(user => {
user.should.have.property('name') //응답값안에 name이라는 객체를 가지고있어야한다.
})
//console.log(res.body)
done()
})
})
})
'NodeJs' 카테고리의 다른 글
TDD[6] 사용자목록 및 사용자 상세정보 API개발 (0) | 2021.03.31 |
---|---|
TDD[5] TDD로 API 서버 개발 (0) | 2021.03.31 |
TDD[3] REST API 이해와 설계 (0) | 2021.03.31 |
TDD[2] Express.js 역할 및 구조의 이해 (0) | 2021.03.31 |
TDD[1] Node.js 기본 구조 이해 (0) | 2021.03.31 |