【Jest】AngularでJestを使用する
概要
Angular で Jest を使用してユニットテストを実行するサンプルを作成しました。
なぜJestなのか
ユニットテストを全て実行していくと、プロジェクトが肥大化していくにつれてスローテスト問題にぶつかります。
CI実行が5~10分が当たり前になり、プルリクエストがCI待ちになるケースがあります。
Jestにすることでテスト実行時間が大幅に改善されます。
Jestを実行するにあたって、ライブラリやテスト設定まわりの変更が必要になります。
ただ、基本的にはテストコードについてはそのまま流用可能です。
以下に主観ですが、メリット・デメリットを記載します。
メリット
- Jasmine・karmaと比較してテスト実行速度が速い。
- Gitの履歴を見て差分のみテストを実行出来る。
- テストコードについてはそのまま使用出来る。
デメリット
- Angular CLI に標準対応していない。
- テスト用にライブラリや設定が必要。
実行環境
- Node.js 10.x
- Yarn 1.12.x
使用ライブラリ
- TypeScript 3.2.x
- Angular 7.2.x
- Jest 23.6.x
- ts-jest 23.10.x
- jest-preset-angular 6.0.x
- @angular-builders/jest 7.2.x
Jestを実行するための設定
Angularプロジェクトに以下の設定をしていきます。基本的には以下の記事通りに設定することで対応可能です。
1. packege.jsonにライブラリ追加
jest
と jest-preset-angular
を追加する。
2. setupJest.ts追加
src/setupJest.ts
を追加。ファイルの内容は以下の通りです。
import 'jest-preset-angular'; import './jestGlobalMocks';
3. jestGlobalMocks.ts追加
src/jestGlobalMocks.ts
を追加。ファイルの内容は以下のURLの通りです。
https://github.com/thymikee/jest-preset-angular/blob/master/example/src/jestGlobalMocks.ts
4. package.jsonにJest設定を追加
以下の設定を package.json
に追加する。
{ "jest": { "preset": "jest-preset-angular", "setupTestFrameworkScriptFile": "<rootDir>/src/setupJest.ts" } }
5. Jestの実行
yarn jest
を実行することで単体テストを実行します。
実行結果
サンプルソース一式
おわりに
- 既存のテストの実行時間と比べて大幅に改善されるため、スローテスト問題に悩まされている方は是非使用を検討してみてください。
- テストコードに手を付けず、設定変更のみでいけたのが楽だった。
- テスト結果やカバレッジなどのレポーティングも充実していて、CI連携用の出力ファイルもあるため、自動テストが簡単に移行できた。