[TDD : Test Driven Develop]
- 테스트 주도 개발 : 처음부터 모든 기능을 개발하기보다 테스트 코드를 먼저 개발하고 테스트 한 뒤 개발
- 테스트 해보고 원하는 결과값이 나오는지 확인하고!
- 유지 보수할 때 좋다함 : 느껴봐야지
[nodejs에서 TDD]
- mocha, should, superTest 라이브러리를 사용함
1) mocha : 테스트 코드 작성 후 실행 해보는 테스트 러너, 테스트 베이스를 만들기 쉬움, 테스트 결과를 알기쉽게 보여줌
- 공식페이지 : https://mochajs.org/
- 테스트 수트와 테스트 케이스로 이뤄져있음
- 테스트 수트 : 테스트 환경을 말함, describe() 로 구현
- 테스트 케이스 : 테스트(테스트 코드 생성)를 말함, it() 로 구현
(1) npm i mocha --save-dev : npm으로 설치, package.json 의존 모듈 등록(개발환경에서만 사용)
(2) utils.js : 테스트할 코드 작성, 모듈화 시키기 - 테스트 수트에서 사용할 것이기 때문에
var capitalize = function(str){
var temp = str.substring(1, str.length);
return str.charAt(0).toUpperCase() + temp.toLowerCase();
}
module.exports = { capitalize: capitalize };
(3) util.spec.js : .js 앞에 .spec이 붙어있으면 테스트코드라 보면 됨, 테스트 코드 작성
const assert = require('assert');
describe("", ()=>{
it("", ()=>{
let result = utils.capitalize("finally");
assert.equal(result, "Finally");
});
})
- assert : 테스트 코드 실행-비교를 위해 사용할 nodejs 내장 모듈, 지정한 값과 실행 결과값이 동일한지 알아보는 equal 메서드
- describe 첫번째 파라미터 : 테스트에 대한 설명
- describe 두번째 파라미터 : 테스트 케이스 코드 - it() 함수
- it 첫번째 파라미터 : 테스트 결과에 대한 설명
- it 두번째 파라미터 : 테스트 코드 - utils 모듈 함수 실행 및 지정 결과값(assert 테스트를 위한 내장모듈) 비교
(4) mocha 실행 : 테스트 수트, 케이스 작성하고 테스트 런까지
$ node_modules/.bin/mocha utils.spec.js
- npm 명령어로 실행하지못함
- mocha 모듈 패키지 내 실행파일로 .spec.js 코드 실행
- mocha로 실행하면 테스트 결과가 아래와 같이 보기 좋게 나옴
(5) mocha + assert 정리
- 테스트 수트, 케이스 : 테스트를 위한 환경을 만들어줌
- mocha 모듈 패키지 내 실행파일로 테스트 코드 실행
- assert : 실행 결과를 비교하기위해 사용하는 내장 모듈, 테스트할 때 가장 필요한 모듈이겠지?
- 코드 모듈화 : 모듈화된 코드 로드해서 테스트(단위테스트 - 하나의 함수에 대해 테스트)
2) should
- 테스트 코드를 검증할 때 사용하는 써드파티 라이브러리
- 공식페이지(github readme.md) : https://github.com/shouldjs/should.js/
- assert는 nodejs 공식 모듈, should 써드파티 모듈
(1) npm i --save-dev should : 설치하기, devDependencies 추가
(2) utils.spec.js : 테스트 케이스 수정
const utils = require('./utils');
const should = require('should');
describe('~~~', () =>{
it('~~~~', () => {
const result = utils.capitalize('hElLo');
result.should.be.equal('Hello');
})
});
- 직관적인 테스트 실행 코드
3) SuperTest
- mocha가 하나의 함수를 테스트했다면, 통합테스트(api 기능 테스트)에서 사용하는 라이브러리
- api 서버라면 내부적으로 express 구동 -> 요청보낸 뒤 결과 검증까지함(시나리오 코드 작성)
- 공식 api 문서(github readme.md) : https://github.com/visionmedia/supertest
(1) npm i supertest --save-dev, mocha까지 설치하기 : 설치를 해줌
(2) index.js 작성 : express 설치되어있는 상태
const request = require('supertest');
const express = require('express');
const app = express();
const port = 3000;
app.get('/users', (req, res) =>{
res.status(200)
.json({name: 'jinbro'});
});
app.listen(port, ()=>{
console.log("server is running");
});
module.exports = app;
- 모듈화 시키기
(3) index.spec.js 작성 : index.js 테스트 코드
const app = require('./index');
const request = require('supertest');
describe('GET /users는', ()=>{
it('json을 리턴한다.', (done)=> {
request(app)
.get('/users')
.expect('Content-Type', /json/)
.expect('Content-Length', '17')
.expect(200)
.end((err, result) => {
if(err){
done(err);
} else {
done();
console.log(result.body);
}
});
});
});
- mocha로 테스트코드를 돌릴 예정
- done() : api 서버는 비동기로 동작하게 되어있음, 응답 받은 후 done() - 테스트 완료처리 함수
=> mocha api문서 참고 : https://mochajs.org/ ---> ASYNCHRONOUS CODE 검색
(4) 테스트 코드 실행
$ node_modules/.bin/mocha index.spec.js
- 아래는 테스트 코드 실행 후 이미지
[정리]
- mocha : 테스트를 위한 환경설정 간단하게 해줌
- assert, should : 테스트 결과를 가지고 작업을 할 수 있게 해줌
- supertest : 테스트 환경에서 api 테스트할 수 있게 해줌
[참고자료]
- nodejs, Assert : https://nodejs.org/api/assert.html
- 개인블로그, Asset: node.js 테스트 모듈 : https://hyunseob.github.io/2016/05/09/assert-nodejs-test-module/
- MDN, String.prototype : https://goo.gl/dQ0mfj
'nodejs' 카테고리의 다른 글
[node.js] AJAX API 서버 만들기 (0) | 2017.06.17 |
---|---|
[node.js] 유저 목록 조회, 유저 조회, 삭제 테스트 + API 서버 구현 (0) | 2017.06.16 |
[node.js] express로 REST API 서버 개발 (0) | 2017.06.09 |
[node.js] npm, package.json 제대로 알고 가기 (0) | 2017.06.08 |
[node.js] http 모듈로 간단하게 유저 API 서버 만들기 (0) | 2017.06.05 |
댓글