uju's Tech

[Node.js]Mocha를 이용해서 간단한 Test 해보기 본문

Node

[Node.js]Mocha를 이용해서 간단한 Test 해보기

ujusy 2020. 7. 6. 17:23

<본 포스팅은 공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!>

 

지금까지 Node.js를 기반으로 개발을 진행할 때 항상 Post man으로 Api 응답을 하나하나 확인했었다.

테스트 코드를 사용하면 이와 같은 반복적인 행위를 줄여주고 빠른 오류와 버그 확인이 가능하다.

제일 중요한 부분이라고 생각했던 것은 리팩토링의 기초가 된다는 점이었다.

 

MOCHA를 찾아보니 Node.js의 test 프레임워크로 가장 많이 사용되는 테스트 도구라는 것을 알게되었다.

MOCHA를 설치하고 간단하게 코드를 작성해보도록 하겠다.

 

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

위의 공식 문서를 통해 MOCHA를 자세히 살펴 볼 수 있다.

 

Assertion 라이브러리에는 chai 그리고 test double을 도와주는 sinon 이 있다. 

아직 구체적으로 사용해보지 못했지만 chai는 다양한 assertion을 제공해주는 라이브러리고 sinon은 spy,stub,mock등을 지원하는 단위테스트 라이브러리라고 이해했다.

 

먼저 mocha를 설치해준다. 공식문서에 설치법이 나와있다.

npm install --global mocha

npm install --save-dev mocha

설치 후에 package.json에서 확인 할 수 있다.

package.json

또한 package.json에 scripts를 추가하여 npm test 명령어를 통해 간편하게 test 할 수 있도록 하였다.

스크립트 추가

필자는 test 폴더 안에 test.js를 만들어 주었다.

test.js코드를 살펴보자.

var expect = require('chai').expect;
var sqlite3 = require('sqlite3').verbose();
const assert = require('assert');

read_db = () =>{
    var db = new sqlite3.Database('./test.db',(err)=>{
    db.all('select * from memeber', (err, data)=>{
        if(err) console.log(err);
        else console.log(data);
    });
});
}

it('test', async function() {
        this.timeout(3000);
        read_db((data) => {
            expect(result[0]['id']).to.equal('soso');
            expect(result[0]['pass']).to.equal('1234');
        })
    
});

짧은 코드지만.. 처음 공부해보는 입장으로서.. 공부하고 실행해보는데 까지 시간이 걸렸다..ㅜㅜ

chai는 expect를 사용하기 위해 명시해주었다.

--> chai 또한 설치해주어야 한다. 

https://www.chaijs.com/guide/installation/

 

Installation - Chai

Installation Chai is available for both node.js and the browser using any test framework you like. There are also a number of other tools that include Chai. Node.js Package is available through npm: Recommend adding it to package.json devDependencies using

www.chaijs.com

여기서 확인!

type이 같은지 보려면 expect(,,).to.be.a(,,);

문자열이 동일한지 보려면 expect(,,).to.equal(,,);

등으로 확인할 수 있다.

 

또한 위의 코드에서 timeout을 따로 지정해준 이유는 저렇게 지정을 안해주니 계속 2초가 지났다는 오류가 발생하여.. timeout을 set해주었다.

set해주니..아래와 같이 정상적으로 작동한다..

test.js 실행 결과

간단하게 공식문서를 참고하고 서칭을 통해 구현해나갔는데 아직 이해가 부족한 것 같다.. 조금 더 공부해서 CRUD test code또한 작성해보아야겠다 ,,!

Comments