前回、Jestを使ってTypeScriptのテストをやってみました。 kotapontan.hatenablog.com
今回は、Jestでカバレッジが収集できるのか気になっていましたが、オプションを指定することでカバレッジが収集できるようなので試してみます。
--coverageオプションでカバレッジを取得する
カバレッジを取得するには、 --coverageオプションを指定します。
./node_modules/.bin/jest --coverage
を実行すると各テストソースのテストが実行される。
全てのテストが終了後に、テストサマリが出力される。
$ ./node_modules/.bin/jest --coverage PASS __tests__/todolist.test.ts PASS __tests__/todoitem.test.ts PASS __tests__/actionevent.test.ts ----------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ----------------|---------|----------|---------|---------|------------------- All files | 100 | 100 | 100 | 100 | actionevent.ts | 100 | 100 | 100 | 100 | todoitem.ts | 100 | 100 | 100 | 100 | todolist.ts | 100 | 100 | 100 | 100 | ----------------|---------|----------|---------|---------|------------------- Test Suites: 3 passed, 3 total Tests: 8 passed, 8 total Snapshots: 0 total Time: 5.709s Ran all test suites.
また、ルートディレクトリにcoverageフォルダが作成され、coverage/lcov-report/index.html
を
ブラウザで表示するとサマリが表示される。
各ソースファイルがリンクなっており、クリックすると各ソースコードの実行/未実行の行を確認することができる。
網羅できていない行を教えてくれる
Uncovered Lineに未実行の行を出力してくれる。
コマンドラインの実行結果で未実行の行まで分かるとブラウザを開く必要がなので、ありがたい。
PASS __tests__/todolist.test.ts ----------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ----------------|---------|----------|---------|---------|------------------- All files | 86.67 | 75 | 85.71 | 85.71 | actionevent.ts | 100 | 100 | 100 | 100 | todoitem.ts | 100 | 100 | 100 | 100 | todolist.ts | 63.64 | 50 | 66.67 | 60 | 10,15-17 ----------------|---------|----------|---------|---------|------------------- Test Suites: 3 passed, 3 total Tests: 6 passed, 6 total Snapshots: 0 total Time: 3.443s Ran all test suites.
未実行の処理は赤くなり、実行した箇所との区別がはっきりしている。
Jestの収集するカバレッジはC0とC1
Jestで収集するカバレッジは、C0と言われる命令網羅とC1と言われる分岐網羅です。 出力されたカバレッジが全て100%になったので問題なしとせず、複合条件も網羅するようにしましょう。
まとめ
JUnitとは違い、Jestだけでモックやカバレッジを収集できるの良いと思う。 ブラウザでもサマリやソースの網羅箇所を確認できるのでテストしながらカバレッジを取得し、実行漏れを未然に防ぐようにしたい。