Javascript에서 사용할 수 있는 테스트 프레임워크인 Mocha를 사용해보자
설치하기
먼저, npm을 사용해서 global로 설치해 주세요
$ npm install mocha --global
혹은 자신의 프로젝트에 dependency로 설치해 주세요
$ npm install mocha --save-dev
> Mocha 3.0.0 혹은 이후의 버전을 npm으로 설치할 때, 자신의 npm 버전이 2.14.2 이상이여야 설치가 가능합니다.
추가로, Mocha를 실행시키려면 Node.js 버전 4 이상일 때 실행 가능합니다.
시작하기
자신이 사용할 폴더를 만들고, 그 안에 test.js 라는 파일을 생성한 후, 에디터에서 실행시켜주세요.
에디터를 연후, 다음 코드를 넣어주세요
var assert = require("assert");
describe('계산기 테스트', function () {
it('1+1은 2를 반환해라', function (done) {
assert.equal(1+1, 2);
done();
});
it('2*2 는 4를 반환해라', function (done) {
assert.equal(2*2, 4);
done();
})
})
assert
assert는 assertion 함수를 쉽게 사용하기 위해 node.js에서 제공하는 표준 모듈입니다.
var assert = require("assert");
describe
describe는 suite의 테스트 케이스를 생성합니다.
describe('테스트 이름', function () {
})
it
it으로 테스트 코드를 작성합니다. 이때 it의 첫번째 인수는 테스트 케이스 이름을 넣어줍니다.
그리고 두번째 파라미터로는 Mocha가 done 객체를 전달해줄 테스트케이스의 함수를 넣어줍니다. 여기서 done객체는 테스트케이스가 종료되었을 때 호출됩니다. 이를 사용하여 비동기 처리를 할 수 있습니다.
it('1+1은 2를 반환해라', function (done) {
assert.equal(1+1, 2);
done();
});
이제, 터미널에서 mocha를 실행시켜주세요
그러면 터미널에서 다음과 같이 테스트가 통과했다는 결과를 볼 수 있습니다!
하지만 실제로는 더 큰 어플리케이션에서 테스트를 할 텐데요, 그래서 우리는 테스트 케이스를 더 카테고리화 해봅시다.
그러기 위해 우리는 describe() 안에 다른 describe()를 추가할 수 있습니다.
var assert = require("assert");
describe('계산기 테스트', function () {
describe('더하기 테스트다!', function() {
it('1+1은 2를 반환해라', function (done) {
assert.equal(1+1, 2);
done();
})
it('100+100은 200을 반환해라', function (done) {
assert.equal(100+100, 200);
done();
})
});
describe('곱하기 테스트다!', function () {
it('2*2는 4를 반환해라', function (done) {
assert.equal(2*2, 4);
done();
})
it('2*1111는 2222를 반환해라', function (done) {
assert.equal(2*1111, 2222);
done();
})
})
})
그러면 다음과 같이 결과를 확인할 수 있습니다.
비동기 코드를 사용한 또 다른 예제
비동기 처리를 위해서는 위에서 언급한 done 객체를 반환하면 됩니다. 정말 단순합니다!
describe('User 테스트', function () {
describe('저장해라', function () {
it('에러 없이 저장해라', function (done) {
var user = new User('Luna');
user.save(done);
})
})
})
Hooks
Mocha에서는 BDD스타일 인터페이스를 위해 hooks 들을 before(), after(), beforeEach(), afterEach() 와 같은 것들을 제공합니다.
이것들은 전제조건을 설정해주고, 테스트 후에 우리의 테스트들을 정리해줍니다.
describe('hooks 테스트', function () {
before(function () {
//모든 테스트가 실행되기 전에 이 블럭이 실행됩니다.
});
after(function () {
//모든 테스트 실행 후에 이 블럭이 실행됩니다.
});
beforeEach(function () {
//각각의 테스트 실행 전에 이 블럭이 실행됩니다.
});
afterEach(function () {
//각각의 테스트 실행 후에 이 블럭이 실행됩니다.
})
//테스트 케이스 작성
})
Exclusive 테스트
만약 특정 suite나 테스트케이스만을 테스트하고 싶다면 .only()를 함수에 추가하면 됩니다.
describe('계산기 테스트', function () {
describe('더하기 테스트다!', function() {
it.only('1+1은 2를 반환해라', function () {
assert.equal(1+1, 2);
})
it('100+100은 200을 반환해라', function () {
assert.equal(100+100, 200);
})
it.only('1+4 는 5를 반환해라', function () {
assert.equal(1+4, 5)
})
});
})
위의 예제를 실행시키면 두번째 케이스는 제외되고, 첫번째, 세번째 테스트만 실행되게 됩니다.
Inclusive 테스트
Inclusive 는 .only()와 정반대의 기능을 가지고 있습니다. .skip() 을 추가하여 사용할 수 있는 테스트 입니다.
Mocha 에게 이 케이스를 무시하라고 전달합니다. 이 기능을 사용하면 pending 되었다고 결과를 알려줍니다.
var assert = require("assert");
describe('계산기 테스트', function () {
describe('더하기 테스트다!', function() {
it('1+1은 2를 반환해라', function () {
assert.equal(1+1, 2);
})
it.skip('100+100은 200을 반환해라', function () {
assert.equal(100+100, 200);
})
it.skip('1+4 는 5를 반환해라', function () {
assert.equal(1+4, 5)
})
});
})
Pending 테스트
Pending 테스트는 콜백이 없는 케이스 입니다. "누군가가 이 테스트 케이스를 작성해야 합니다" 와 같이 케이스가 작성되길 기다리는 테스트 입니다.
var assert = require("assert");
describe('계산기 테스트', function () {
describe('더하기 테스트다!', function() {
it('누군가 이 케이스를 작성해야 합니다.')
});
})
참고
https://mochajs.org/#getting-started