일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- strongloop
- 주식
- ps4
- Games
- 이더리움
- 보안
- 젤다 왕눈
- 탈중앙화
- 시장
- 리뷰
- kubernetes
- 블록체인
- 게임
- 암호화폐
- 투자
- 스마트 컨트랙트
- Three
- Docker
- review
- game
- angular
- loopback
- 스마트 계약
- Linux
- 비트코인
- 쿠버네티스
- 거래
- 부동산
- PC
- threejs
- Today
- Total
BaeBox
Mocha(모카) - JavaScript Test Framework 본문
Mocha : Node.js 테스트를 위한 프레임워크.
예전부터 이름이나 좀 들어보고 어디서 튜토리얼 따라해보다가 오늘 시간이 많이 나서 잠깐 만져봤는데 이게 굉장히 재밌다.
여전히 TDD니 BDD니 하는건 잘 모르겠고, 이거보면서 든 생각은 버그나는건 획기적으로 줄일 수 있겠다는 생각이 들었다. QA한테 깨질일이 주는거지
처음에는 document를 읽어보다가 이해가 잘 안돼서 아래 블로그 가서 보니까 이해가 되더라. 사랑합니다.
https://heropy.blog/2018/03/16/mocha/
테스트 프레임워크니 뭐니 해도 뭘 어떻게 테스트한다는건지 궁금할것이다. 적어도 난 그랬다.
간단하다.
함수별로 결과값을 테스트하는 것 뿐이다. (물론 인자를 받는 함수라면 인자를 넣어주면 된다.)
app.js 와 app.spec.js 는 세트이다.
app.js : 소스 코드
app.spec.js : 테스트 코드
// app.js
const axios = require('axios');
module.exports = {
sayHello: function () {
return 'hello';
},
addNumbers: function (a, b) {
return a + b;
},
axiosRequest: async function () {
const res = await axios.get('http://192.168.0.45:13000/users/count');
return res.data.count;
},
}
app.js 가 제공하는 함수들은 sayHello, addNumbers, axiosRequest(비동기) 세 가지다.
app.spec.js 는 위 세 함수들의 결과값을 기대값(나와야 할 값)과 비교할 뿐이다.
// app.spec.js
const sayHello = require('../app').sayHello;
const assert = require('assert');
const app = require('../app');
const should = require('chai').should();
describe('# App test! - original', function () {
it('sayHello should return hello', function (done) {
if (sayHello() === 'hello') {
done();
}
});
it('should greater than 5', function () {
app.addNumbers(3, 4).should.be.above(5);
});
describe('# Custom ', () => {
it('Function axiosRequest test', (axiosRequest) => assert.equal(3, axiosRequest()));
})
});
테스트 기능을 맡는 각 함수를 설명하자면,
- describe : 모카 테스트의 단위를 지정.
- it : 개별적 테스트케이스
실제 위의 코드로 테스트를 하게 된다면 아래와 같은 결과값이 나온다.
결과값으로 알 수 있는 사실은 describe는 테스트 단위를 지정만하고, 실질적으로 테스트를 하는 것은 it 함수이다.
// app.spec.js + with hooks(before, after, beforeEach, afterEach)
const sayHello = require('../app').sayHello;
const assert = require('assert');
const app = require('../app');
const should = require('chai').should();
let a, b;
describe('# App test! - original', function () {
before(() => {
console.log(' *** before hook');
a = 10;
b = 20;
});
after(() => console.log(' *** after hook'));
beforeEach(() => console.log(' * beforeEach hook'));
afterEach(() => console.log(' * afterEach hook'));
it('sayHello should return hello', function (done) {
if (sayHello() === 'hello') {
done();
}
});
it('should greater than 5', function () {
app.addNumbers(a, b).should.be.above(5);
});
describe('# Custom ', () => {
it('Function axiosRequest test', (axiosRequest) => assert.equal(3, axiosRequest()));
})
});
이번에 알아볼 것은 Hook 이다.
Hook은 선언된 describe 내에서만 실행이 된다.
Hook은 네 가지가 있는데
- before : 최초에 한번만 실행
- after : 최후에 한번말 실행
- beforeEach : 모든 it 전에 실행
- afterEach : 모든 it 후에 실행
간단하다.
덤. describe와 it 의 정확한 정의는 찾기가 힘들었다. 내가 못찾는 것일수도 있지만 심지어 공식 문서에서도. 모두가 아는데 또 설명해보라고하면 또 어려운 그런건가. REST API 같이. 정작 만든 로이 필딩은 니들이 쓰는건 REST API가 아니라고 하고.
조금 찝찝해서 module 내의 export 하는 부분을 봤더니 suite 와 test 라고 이름 붙여놓은 것을 보니 내가 정리한 내용이 틀리지 않은 모양이다.
https://www.npmjs.com/package/mocha
https://heropy.blog/2018/03/16/mocha/
'개발 관련' 카테고리의 다른 글
Angular Custom Webpack (0) | 2020.04.12 |
---|---|
Module Bundler (모듈 번들러) (0) | 2020.04.11 |
json import( allowSyntheticDefaultImports 문제) (0) | 2020.04.08 |
PM2 (0) | 2020.03.14 |
Node - Cluster Module (0) | 2020.03.14 |