mocha – nodejs test framework

모카는 nodejs 와 browser 환경에서 동작하는 자바 스크립트 테스트 프레임워크 이다. 피처 중심의 테스트를 잘 지원하고 비동기 기능에 대해서도 간단하게 구현 가능하다. 유연하고 정확한 보고서 출력을 지원하며 연속해서 테스트를 수행한다.

설치 및 시험

node 프로젝트 폴더로 이동하여 npm 으로 mocha 설치하고 편집기로 간단한 테스트 코드를 작성한다. 테스트 코드에서 사용하는 chai 모듈을 npm 을 통해서 개발 환경(–dev-save 옵션)으로 설치한다.

$ npm install -g mocha
$ npm install chai –dev-save
$ mkdir test
$ vi test/test.js

테스트 코드는 아래와 같이 작성한다.

var assert = require('chai').assert;
describe('Array', function() {
  describe('#indexOf()', function () {
    it('should return -1 when the value is not present', function () {
      assert.equal(-1, [1,2,3].indexOf(5));
      assert.equal(-1, [1,2,3].indexOf(0));
    });
  });
});

mocha 를 실행하여 작성된 테스트 코드를 실행해 보자.

$ mocha

Array
#indexOf()
✓ should return -1 when the value is not present

1 passing (10ms)

결과 보고서

결과 보고서를 파일 형태로 남기고 싶을 때는 xunit 과 같은 패키지를 사용하는 것이 jenkins 와 같은 CI환경에서 보기에 적당하다. xunit-file 을 설치하자.

$ npm install xunit-file –save-dev

아래 명령으로 테스트 결과를 파일로 기록할 수 있다.

$ XUNIT_FILE=test-report.xml mocha -R xunit-file

테스트 커버리지

테스트 결과만 보면 흡족할 수 있으나 전체 코드 중에 얼마나 테스트 된 건지는 알 수 없다. 모카의 테스트 결과를 이스탄불을 통해서 커버리지 보고서로 받아 볼 수 있다. 이스탄불을 설치하자.

$ npm install –save-dev istanbul

상당히 많은 양의 패키지를 다운로드 받는다. 커버리지 보고서는 json 형태로 현재 폴더 안에 coverage 라는 새로운 폴더가 생기고 그 안에 파일이 저장된다. git 를 사용한다면 보고서 내용이 소스와 같이 취급되지 않도록 예외 항목으로 등록할 필요가 있다.

$ echo “/coverage” >> .gitignore

이제 이스탄불을 실행해 보자. 아래와 같은 결과가 나온다. 상당히 낮은 커버리지를 보여 주는데 테스트 코드를 더 열심히 작성해야겠다.

$ ./node_modules/.bin/istanbul cover _mocha

Array
#indexOf()
✓ should return -1 when the value is not present
  
User Service
#getNew(data)
✓ should return an user class when data is not present
  
2 passing (16ms)
=============================================================================
Writing coverage object [/Users/hwangyongho/Documents/dev/cloud/redis/coverage/coverage.json]
Writing coverage reports at [/Users/hwangyongho/Documents/dev/cloud/redis/coverage]
=============================================================================
  
=============================== Coverage summary ===============================
Statements : 32.69% ( 34/104 )
Branches : 24% ( 6/25 )
Functions : 21.43% ( 6/28 )
Lines : 34.69% ( 34/98 )
===============================================================================

매번 복잡하게 명령을 실행할 것이 아니라 package.json 파일에 coverage 라는 이름으로 아래와 같이 스크립트를 등록하고 npm run coverage 를 실행하면 된다.

/* package.json */
{
  ...
  "scripts": {
    "coverage": "istanbul cover _mocha -- -R spec"
  }
}

참고 사이트

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중