ヒトリ歩き

愚痴とかいろいろ書きます

Jestでカバレッジを収集する

前回、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を ブラウザで表示するとサマリが表示される。

f:id:kotapontan:20200430215324p:plain

各ソースファイルがリンクなっており、クリックすると各ソースコードの実行/未実行の行を確認することができる。

f:id:kotapontan:20200430215347p:plain

網羅できていない行を教えてくれる

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.

未実行の処理は赤くなり、実行した箇所との区別がはっきりしている。

f:id:kotapontan:20200430215413p:plain

Jestの収集するカバレッジはC0とC1

Jestで収集するカバレッジは、C0と言われる命令網羅とC1と言われる分岐網羅です。 出力されたカバレッジが全て100%になったので問題なしとせず、複合条件も網羅するようにしましょう。

まとめ

JUnitとは違い、Jestだけでモックやカバレッジを収集できるの良いと思う。 ブラウザでもサマリやソースの網羅箇所を確認できるのでテストしながらカバレッジを取得し、実行漏れを未然に防ぐようにしたい。