-
[mocha] 자바스크립트 단위테스트 시작하기개발/JS 2018. 1. 27. 23:40
단위테스트(Unit Test)가 필요한 이유?
프로그램을 작은 단위로 쪼개서 내가 짠 프로그램이 내가 원하는 결과대로 동작하는 지 테스트할 수 있다.
단위테스트를 거치면 프로그램의 안정성이 높아지며, 단위테스트를 믿고 리팩토링을 할 수 있다.
자바스크립트로 짜여진 프로그램에서 오류를 찾을 때, 단위테스트를 거치지 않은 프로그램의 경우는 전체 흐름을 파악해가며 원인을 찾아야한다.
원인을 찾아 수정한다해도 이 결과가 어떤 이펙트를 가져올지 예상하기가 어려울 수 있다.
사실 단위테스트를 해본 적도 없고 잘 모른다.
자바스크립트 코딩을 테스트 할 때 alert 또는 console.log를 이용하는 방법 밖에 모르니깐..
mocha 자바스크립트 테스트 프레임워크
1. 셋팅하기 (Windows8)
mocha는 node.js가 기반인 프레임워크이기 때문에 node.js가 설치되어있어야 한다.
설치 후 cmd 창에 node --version 이라고 쳐서 버전 정보가 제대로 나오면 설치가 잘 된 것이다.
cmd 창에 아래와 같이 입력하면 mocha 사용 준비 완료!
$npm install -g mocha
그리고 Assertion Library인 Chai를 추가해보자.
작업 디렉토리에서 아래를 cmd 창에서 실행한다.
$nbm install chai
그 결과, node_moduls 폴더가 생성된다.
2. 사용하기
InspiredJW님의 티스토리 블로그를 참고했습니다!
모카는 test 디렉토리에 있는 파일을 실행하기 때문에, 테스트 코드는 이 디렉토리 안에 위치시켜야한다.
JsStudy/JsStudy.js
'use strict';
exports.foo = (a,b) => {
if(typeof a !== 'number' || typeof b !== 'number')
return false;
return a*b;
};
exports.bar = (callback) => {};
JsStudy/test/JsStudyTest.js
'use strict';
let chai = require('chai');
let should = chai.should();
let foo = require('../JsStudy').foo;
describe('Function Foo', () =>{
describe('with two number params',()=>{
it('should return product',()=>{
let result = foo(3,4);
result.should.be.a('number');
result.should.equal(12);
});
});
});
describe('with non-number params',()=>{
it('should return false',()=>{
let result = foo(3,null);
result.should.be.false;
});
});
테스트 실행방법은 cmd 창에서 JsStudy 폴더로 이동한후,
$mocha
실행하기.
API
describe() : 테이스틔 이름을 지정하며, 중첩하여 사용할 수 있다.
테스트를 구분하는 section이며, 단위테스트 부분을 콜백으로 넘겨준다.
it() : 단위테스트의 이름을 작성하고 실제 실행되는 코드를 콜백(done)으로 넘겨준다.
befor() : 테스트 코드가 실행되기 전 한번 실행된다.
after() : 모든 테스트 코드가 실행된 후 한 번 실행된다.
beforeEach() : (테스트 코드가 여러개일 경우) 각각의 테스트 코드가 실행되기 전마다 실행된다.
afterEach() : (테스트코드가 여러개일 경우) 각각의 테스트 코드가 실행된 후마다 실행된다.
.a(type[,msg]) : 지정된 타입과 동일한지 리턴.
.equal(val[,msg]) : === var과 주어진 타켓이 같은지.
.false : 타켓 === false
'개발 > JS' 카테고리의 다른 글
[JS] Jquery 알아보기 (0) 2018.01.28 [JS] call()과 apply() (0) 2018.01.28 [생활코딩] Javascript - 객체지향2 (0) 2018.01.13 [생활코딩] Javascript - 객체지향1 (0) 2018.01.13 [생활코딩] Javascript - 함수지향4 (0) 2018.01.13