開発覚書はてな版

個人的な開発関連の備忘録

【Jest】AngularでJestを使用する

概要

Angular で Jest を使用してユニットテストを実行するサンプルを作成しました。

jestjs.io

github.com

なぜ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プロジェクトに以下の設定をしていきます。基本的には以下の記事通りに設定することで対応可能です。

github.com

1. packege.jsonにライブラリ追加

jestjest-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 を実行することで単体テストを実行します。

実行結果

f:id:kakkoya:20190126144258p:plain

サンプルソース一式

github.com

おわりに

  • 既存のテストの実行時間と比べて大幅に改善されるため、スローテスト問題に悩まされている方は是非使用を検討してみてください。
  • テストコードに手を付けず、設定変更のみでいけたのが楽だった。
  • テスト結果やカバレッジなどのレポーティングも充実していて、CI連携用の出力ファイルもあるため、自動テストが簡単に移行できた。