今更コードのカバレッジを気にし始めたクロパンダです(プログラミング歴7年目())。今までは結構ざっくりとテストを書いてきていました。というのも、コードカバレッジという概念がどうも七面倒でやる気が起きなかったのです。
しかし、JavaScriptテストツール「Jest」を試してみたところ、かなり使いやすかったので紹介したいと思います(今更)
そもそもコードカバレッジとは?
コードのうち「テストをしたときに実行された箇所」のことです。
例えば以下の2関数をテストするケースを考えます。
const assert = require('assert'); const f = x => { return x * x; }; const g = x => { return x + x; }; assert.equal(f(2), 4);
この場合、g()
の中は実行されていないので、f()
の部分の割合がカバレッジとなります。
他にも「ifによるの分岐がどれほどカバーされているか」などもカバレッジの対象となります。
const h = x => { if (x <= 3) return 0; return x; } assert.equal(h(4), 4);
この場合は「xが3以下のケース」が実行されていないのでカバレッジは100%となりません。
Jestでカバレッジを計測する
ではJestでカバレッジを計測してみます。
まずJestをインストールします。
$ yarn add -D jest
$ npm i -D jest
次にテストを書いていきます。コードは__tests__/
ディレクトリ以下に書いてください。
main.js
module.exports = { f(x) {return x * x}, g(x) {return x + x}, h(x) { if (x <= 3) return 0; return x; } };
__tests__/main.js
const assert = require('assert'); const {f, g, h} = require('../main.js'); describe('MyFunctions', () => { describe('f()', () => { it('should square x.', () => { assert.equal(f(3), 9); }); }); describe('g()', () => { it('should twice x.', () => { assert.equal(g(3), 6); }); }); describe('h()', () => { it('should return 0 when x is 3 or less.', () => { assert.equal(h(1), 0); }); it('should return x when x is greater than 3.', () => { assert.equal(h(4), 4); }); }); });
あとは次を実行するとカバレッジが表示されます。
$ npx jest --coverage
また、coverage/lcov-report/index.html
にテストで実行された箇所が可視化されます。どこのテストを書けばいいのかひと目で分かって便利です。
npm run coverageで実行する
package.json
に次のように記述しておくとカバレッジ計測が楽になります。
"scripts": { "coverage": "jest --coverage" },