라이브러리 3가지
- mocha
- should
- superTest
Mocha
- 테스트 코드를 실행시켜 주는 테스트 러너
- 테스트 수트: 테스트 환경 -> 모카에서는 describe()으로 구현
- 테스트 케이스: 실제 테스트 -> 모카에서는 it()으로 구현
- 모카 설치: npm -i mocha --save-dev
- 모카 실행: node.modules\.bin\mocha 실행파일명
예시 코드)
//utils.js
function capitalize(str){
return str.charAt(0).toUpperCase() + str.slice(1);
}
module.exports = {
capitalize : capitalize
};
//utils.spec.js spec이 들어간 파일은 테스트 파일이다.
const utils = require('./utils');
const assert = require('assert');
describe('utils.js모듈의 capitalize()', ()=>{
it('문자열의 첫번째 문자를 대문자로 변환한다.', ()=>{
const result = utils.capitalize('hello');
assert.equal(result, "Hello");
})
});
결과
Should
- 노드 asswer 말고 서드파트 라이브러리를 사용
- 슈드(should)는 검증(assertion) 라이브러리
- 가독성 높은 테스트 코드를 가능하게 함
예시 코드)
const utils = require('./utils');
const should = require('should');
describe('utils.js모듈의 capitalize()', ()=>{
it('문자열의 첫번째 문자를 대문자로 변환한다.', ()=>{
const result = utils.capitalize('hello');
result.should.be.equal('Hello');
})
})
superTest
- 위에 까지는 단위 테스트(함수의 기능 테스트)를 한 것
- 수퍼테스트는 익스프레스 통합 테스트용(API의 기능 테스트) 라이브러리
- 내부족으로 익스프레스 서버를 구동시켜 실제 요청을 보낸 뒤 결과를 검증
예시 코드)
//index.spec.js
const request = require('supertest');
const should = require('should');
const app = require('./index');
describe('GET /users는', ()=>{
describe('성공시', ()=>{
it('유저 객체를 담은 배열로 응답한다.',(done)=>{
request.agent(app)
.get('/users')
.end((err,res)=>{
res.body.should.be.instanceOf(Array);
done();
})
})
})
})
//index.js
const express = require('express');
const morgan = require('morgan');
const app = express();
const users = [
{id: 1, name:'alice'},
{id: 2, name:'bek'},
{id: 3, name:'chris'},
];
app.use(morgan('dev'));
app.get('/users', function (req, res){
res.json(users);
});
app.listen(3000, function(){
console.log('Server is running');
});
module.exports = app;
- api서버는 비동기 환경이기 때문에 done 함수를 인자로 받아 테스트를 완료해주어야한다.
References
https://github.com/visionmedia/supertest
'Javascript > Node.js' 카테고리의 다른 글
ORM(Sequelize) & 데이터베이스 (0) | 2020.06.15 |
---|---|
SuperTest 연습 (0) | 2020.06.11 |
익스프레스JS (0) | 2020.06.10 |
NodeJS의 특징 (0) | 2020.06.09 |
Https와 Http2 (0) | 2019.11.06 |
댓글