-
[JS] 테스트 프레임워크 Mocha.js 시작하기Dev/JS 2018. 4. 22. 00:50
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를 실행시켜주세요
$ 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);})})})HooksMocha에서는 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
'Dev > JS' 카테고리의 다른 글
[JS] Javascript Propagation :: 이벤트 버블링, 이벤트 타겟, 이벤트 캡쳐 (0) 2018.05.21 [JS]react-router 적용해보기 (0) 2018.05.21 [JS] ECMA2018 : ES9 알아보기 (0) 2018.04.28 [JS] Redux Thunk 알아보기 (0) 2018.04.28 [JS] async/await (0) 2018.04.04