[Node.js] 모카(Mocha)

2020. 10. 27. 00:50NodeJS/TDD

1. 테스트 주도 개발(TDD)

  테스트 주도 개발Test Driven Development의 약자로 TDD라고 표기한다. 테스트 주도 개발은 테스트 코드를 작성해서, 코드를 하나씩 통과시켜서 만드는 개발방법을 말한다. 

 

 

[그림 1] 프로그래머스 코딩 테스트 체점 결과

 

 [그림 1]은 프로그래머스라는 사이트에서 알고리즘 문제를 풀고나서 체점한 결과를 나타낸다. 체점 시, 통과 또는 실패라는 결과가 뜨는 이유는 여러 테스트 케이스와 결과 값을 준비했기 때문이다. 테스트케이스를 입력으로 넣고, 출력 값이 예상된 결과 값과 같을 경우통과 다를 경우실패로 간주한다.

 

 

 이처럼 테스트 주도 개발은 함수가 개발자의 의도대로 잘 작동하는지, 버그는 있는지를 체크하거나, Api 서버를 만들 때와 같이 여러 상황에서 사용할 수 있다. 용도는 다양하게 쓸 수 있어도 의도성, 정확성 체크라는 부분에서 목표는 같다.

 

2. 모카(Mocha)

 모카(Mocha)는 테스트 주도 개발(TDD)를 할 수 있는 대표적인 자바스크립트 프레임워크다. 강의나 블로그 자료를 보면, 모카(mocha)는 API 서버를 만들 때 사용하기 보다는, 함수를 테스트할 때 주로 사용하는 툴인 것 같다. 이번 포스팅에서는 간단하게 덧셈 함수를 만들고, 이에 대한 코딩테스트를 만들어 보면서 모카(Mocha)의 간단한 사용법을 익히는 것이 목표다.

 

 

모카(Mocha)를 Node.js에서 설치하는 방법은 어렵지 않다.

npm install mocha --save--dev
yarn add mocha --dev

npm 사용자는 첫 번째 라인처럼, yarn 사용자는 두 번째 라인처럼 입력하면 된다.

 

 이제 임의로 utils.js라는 파일과 utils.spec.js라는 파일을 만들어주자. 여기서 utils.js는 add라는 함수를 만들어서 모듈화시키기 위해 만들었고, utils.spec.js는 add함수에 테스트 케이스를 만들어서 결과를 출력하기 위해 만들었다. 보통 spec.js라는 이름이 붙으면 테스트를 위한 파일이라고 생각하면 된다.

 

[그림 2] utils.js와 utils.spec.js

 

 utils.js에 다음 코드를 입력해주자. 나는 ES6를 사용하기 위해 바벨을 미리 설치했다. 바벨 설치하는 방법은 이번 포스팅의 목적과 무관하기 때문에 따로 설명하지는 않겠다.

const add = (a,b) => {
    return a+b;
}

export default add;

 

그리고 utils.spec.js에 다음 코드를 입력해주자.

import add from "./utils";
import assert from "assert";
// spec이 들어가 있는파일은 테스트 코드라고 생각하면 된다.

const testCases = [
    {nums:[1,2], expect: 3}, 
    {nums:[3,4], expect: 6},
    {nums:[5,2], expect: 7}
];

describe("실행 결과", () => {
    testCases.forEach(({nums, expect}) => {
        const result = add(nums[0], nums[1]);
        const msg = result === expect ? "통과" : "실패";
        it(msg, ()=> {
            assert.strictEqual(result, expect);
        });
    });
});

 

코드에 대해 간단히 설명을 하자면

(1) describe구현할 함수의 기능을 설명하는 부분이다. 나는 덧셈의 예상값과 결과 값의 일치 유무를 검사하는 기능을 가진 함수를 의도했기 때문에 검사결과라는 설명을 달아줬다.

(2) result에 두 수의 덧셈 결과 값을 반환해서 저장한다.

(3) expect와 result가 같으면 msg에 통과, 아니면 실패라는 문자열을 저장한다.

(4) It 함수의 첫 번째 파라미터에는 판독 결과 또는 메세지를 적어놓고, 두 번째 파라미터에는 테스트 함수를 작성하도록 한다.

(5) assert.strictEqual(result, expect)는 예상대로 잘 작동하는지 확인하는 함수다.

[assert.equal는 에디터 자체에서 쓰지말고, strictEqual을  쓰라는 메세지가 출력되어 strictEqual 함수를 썼다]

 

 

 이제 mocha 실행을 위해 @babel/register를 설치해주도록 하자. @babel/register을 사용하는 이유는 내가 ES6문법을 사용하였기 때문이다. 나처럼 import를 사용하지 않고, require을 사용했으면, 설치하지 않아도 된다.

npm install @babel/register --save--dev
yarn @babel/register --dev

 

마지막으로 package.json 파일을 열어 scripts 속성에 다음과 같이 입력해주도록 하자.

{
	"scripts":{
    			 "test": "mocha utils.spec.js -r @babel/register"
    		  }
}

 

 그리고 다음 명령어를 실행해서 콘솔 창을 확인해보자.

npm test
yarn test

 

[그림 3] 실행 결과

 

잘 뜬다.

 

3. 참고 자료