본문 바로가기
Javascript/Node.js

테스트 주도 개발(TDD)

by 모스키토끼 2020. 6. 10.

라이브러리 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

 

visionmedia/supertest

🕷Super-agent driven library for testing node.js HTTP servers using a fluent API. - visionmedia/supertest

github.com

 

'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

댓글