Jello's development blog

Jello's development blog

Node.js 테스트 툴 Should.js, Mocha

들어가며

최근에 토이 프로젝트로 Pushbullet API를 이용하여 원하는 시간대에 원하는 대상에게 Push알림을 보내주는 서비스를 만들고 있다. 서버를 Node.js의 Express로 만들고 있는데, 전에 Django로 진행했던 프로젝트에서와는 다르게, Node.js에서 테스트 코드를 작성하는 것은 또 다른 도전이었다. 테스트 코드를 작성하는 과정에서 알게 된 것들을 정리해보려고 한다.

Should.js

Should.js는 Node.js의 테스트 라이브러리 중 하나로, 여러가지 Assertion 함수를 지원하고 있고, 코드가 읽기 쉽게(Readable) 되어있다는 장점이 있다.
기존 Node.js에 존재하는 assert API를 그대로 가져온 것도 많지만, 테스트를 조금 더 수월하고 직관적으로 할 수 있게 도와준다.

간단한 사용법

equal

10.should.be.equal(10);
'a'.should.be.exactly('a');

length

[1, 2].should.have.length(2);

properties

({ a: 10 }).should.have.properties('a');
({ a: 10, b: 20 }).should.have.properties([ 'a' ]);
({ a: 10, b: 20 }).should.have.properties({ b: 20 });

number

10.should.be.a.Number();

instanceOf

[1, 2].should.be.instanceOf(Array);

위의 간단한 예제와 같이, should.js로 작성된 테스트 코드는 영어를 읽는 듯한 느낌을 주기 때문에, 직관적이고 작성하기 쉽다.
사실 이러한 특징은 다른 테스트 라이브러리에서도 동일하게 나타나기 때문에, 그냥 자신이 편한 라이브러리를 가져다가 써도 무방하다고 생각한다.

Mocha

Mocha는 Node.js의 테스트 프레임워크이며, 테스트 러너를 지원한다.
Mocha는 자체 테스트 라이브러리는 지원하지 않기 때문에, should.js, expect.js, chai 등의 라이브러리를 같이 사용해야 한다. (Mocha는 대표적인 테스트 라이브러리 중 하나로 should.js를 언급하고 있다)

따라서 Mocha는 소스 레벨에서 require해서 사용하는 것이 아니라, should.js, expect.js, chai 등의 라이브러리 테스트 라이브러리를 require해서 사용한 뒤에, Mocha 테스트 러너로 실행하는 것이다.

Mocha의 기본 구조

Mocha의 기본적인 틀은 다음과 같다.

describe('BDD style', function() {
  before(function() {
    // excuted before test suite
  });

  after(function() {
    // excuted after test suite
  });

  beforeEach(function() {
    // excuted before every test
  });

  afterEach(function() {
    // excuted after every test
  });
  
  describe('#example', function() {
    it('this is a test.', function() {
      // write test logic
    });
  });
});

describe()로 테스트의 범위를 잡고, it()으로 유닛테스트를 작성한다. 그리고 before(), after(), beforeEach(), afterEach()를 이용하여 유닛 테스트를 하기 전에 수행되어야 할 사전 작업을 명시한다.

Mocha로 테스트 실행하기

Mocha로 테스트를 실행하기 위해서는 몇 가지 간단한 설정만 해주면 된다.

먼저 npm에 mocha를 설치한다.

$ npm install --save-dev mocha    OR
$ npm install -g mocha

그런 다음에, package.jsonscripts에 다음을 추가한다.

"test": "mocha"

mocha 명령어에 파라미터와 옵션을 추가하여 조금 더 세부적인 세팅을 할 수 있다.
마지막으로, 테스트를 mocha로 실행시키려면,

$ npm test

라고 간단히 쉘에 입력해주면 된다.