BaeBox

Mocha(모카) - JavaScript Test Framework 본문

개발 관련

Mocha(모카) - JavaScript Test Framework

배모씨. 2020. 4. 11. 20:49
반응형

Mocha. (이미지 출처: 공식문서)

Mocha : Node.js 테스트를 위한 프레임워크.

예전부터 이름이나 좀 들어보고 어디서 튜토리얼 따라해보다가 오늘 시간이 많이 나서 잠깐 만져봤는데 이게 굉장히 재밌다. 

여전히 TDD니 BDD니 하는건 잘 모르겠고, 이거보면서 든 생각은 버그나는건 획기적으로 줄일 수 있겠다는 생각이 들었다. QA한테 깨질일이 주는거지

처음에는 document를 읽어보다가 이해가 잘 안돼서 아래 블로그 가서 보니까 이해가 되더라. 사랑합니다.

https://heropy.blog/2018/03/16/mocha/

 

Node.js 테스트 프레임워크 Mocha

Mocha는 Node.js에서 사용하는 테스트 러너를 지원하는 테스트 프레임워크 입니다. Node.js에서 제공하는 Assert 모듈부터 Should.js나 Chai 같은 다양한 Assertion 라이브러리를 사용할 수 있습니다.

heropy.blog


테스트 프레임워크니 뭐니 해도 뭘 어떻게 테스트한다는건지 궁금할것이다. 적어도 난 그랬다.

간단하다.

함수별로 결과값을 테스트하는 것 뿐이다. (물론 인자를 받는 함수라면 인자를 넣어주면 된다.)


 

app.js 와 app.spec.js 는 세트다

app.jsapp.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 하는 describe 와 it

조금 찝찝해서 module 내의 export 하는 부분을 봤더니 suite 와 test 라고 이름 붙여놓은 것을 보니 내가 정리한 내용이 틀리지 않은 모양이다.


https://mochajs.org/

 

Mocha - the fun, simple, flexible JavaScript test framework

Mocha is a feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun. Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct te

mochajs.org

https://www.npmjs.com/package/mocha

 

mocha

simple, flexible, fun test framework

www.npmjs.com

https://heropy.blog/2018/03/16/mocha/

 

Node.js 테스트 프레임워크 Mocha

Mocha는 Node.js에서 사용하는 테스트 러너를 지원하는 테스트 프레임워크 입니다. Node.js에서 제공하는 Assert 모듈부터 Should.js나 Chai 같은 다양한 Assertion 라이브러리를 사용할 수 있습니다.

heropy.blog

 

반응형

'개발 관련' 카테고리의 다른 글

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
Comments