* 개인적으로 kotlin js공부 중이라 JS위주로 작성
코드커버리지(Code Coverage)란?
- 소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표중 하나
- 말 그대로 코드가 얼마나 커버되었는가
- 소프트웨어 테스트를 진행했을 때 코드 자체가 얼마나 실행되었냐 수치화 가능
측정기준
- 코드의 구조[구문(statement), 조건(Condition), 결정(Decision)]를 얼마나 잘 커버하였느냐가 기준
- 구문 : 실행 코드라인이 한번 이상 실행되면 충족
- 조건 : 각 내부 조건 참 혹은 거짓을 가지면 충족
- 결정 : 각 분기의 내부조건 자체가 아닌 전체의 결과가 True or False 면 충족 - 쉽게 생각하면 100줄의 코드가 있으면 80줄이 테스트가 진행되면, 80% 라고 보면 된다.
1 function test(text){
2 var result;3 if("A" == text){
4 result = "success";
5 console.log(result);6 }else{
7 result = "fail";
8 console.log(result);9 }10 return result;11 }
console.log(assertEqual(test("aa"),"aa"));
/*
* 5/7 = 0.71 * 100 = 71%;
* 7,8 커버되지 않음
*/
도구
- Qunit
- QUnit은 자바스크립트 유닛 테스트 프레임워크
- JQuery, jQuery UI, jQuery Mobile을 테스트하기 위해 개발
- 모든 자바스크립트 코드를 테스트하기 위한 제네릭 프레임워크
- JQuery 의 일부로 처음 개발 되었으나, 점점 프로젝트가 확장됨으로써 독립
- https://qunitjs.com
//test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>QUnit Example</title>
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.9.2.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="https://code.jquery.com/qunit/qunit-2.9.2.js"></script>
<script src="tests.js"></script>
</body>
</html>//test.js
QUnit.test( "hello test", function( assert ) {
assert.ok( 1 == "1", "Passed!" );
});
- jasmine
- Pivotal Labs의 개발자들에 의해 만들어진 Behavior-driven development (BDD) 테스트 프레임워크
- 자동화된 자바스크립트 유닛테스트를 작성할 수 있게 해줍니다
- npm으로 설치
- ruby, python, node.js지원
//index.html
<html>
<head>
<link rel="shortcut icon" type="image/png" href="jasmine/lib/jasmine-2.0.0/jasmine_favicon.png">
<link rel="stylesheet" type="text/css" href="jasmine/lib/jasmine-2.0.0/jasmine.css">
</head>
<body> <script type="text/javascript" src="src/test.js"></script>
<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine-html.js"></script>
<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/boot.js"></script></body>
</html>
//test.js
function test(){return "test!";
}// /jasmine/spec/test.spec.js
describe("test", function(){
it("is success", function() {
expect(test()).toEqual("test!");
});
});
- mocha
- npm으로 설치
$ npm install mocha
$ mkdir test
$ $EDITOR test/test.js # or open with your favorite editor
//test.js
var assert = require('assert');
describe('String', function() {
describe('indexOf', function() {
it('문자가 존재 할까?', function() {
assert.equal("문자가 존재하지 않음".indexOf("테"), -1);
});
});
});
terminal:
$ npm test
String
#indexOf()
✓ 문자가 존재하지 않음
1 passing (9ms)
// jest 설치
> npm install jest//mul.js
function mul(a,b){
return a*b;
}module.exports = mul;// mul.test.js
const mul = require('./mul');
test('mul 1 * 2 to equal 2', () => {
expect(mul(1, 2)).toBe(2);
});// jest 테스트
> npm ./sum.test.jsPASS ./sum.test.js
✓ mul 1 * 2 to equal 3 (3ms)