はじめに
テストを実行するに当たって、テストカバレッジやテストの実行時間を計測してテスト戦略を立てていくことは重要です。
ここでは CircleCI で Jest を使ったテストにおける設定項目をまとめます。
環境
CircleCI 2.1
Jest の設定
カバレッジを取得する設定
jest.config.js
に以下の設定を追加します。
collectCoverage
を有効にし、coverageDirectory
でカバレッジレポートの出力先を指定しています。
プロダクションコードが src
ディレクトリ配下にあり、JavaScript、TypeScript が存在するプロジェクトを想定しています。
collectCoverage: true,
collectCoverageFrom: ['src/**/*.{js,ts}'],
coverageDirectory: 'coverage',
これでテストを実行するとカバレッジレポートが出力されます。
テスト結果を取得する設定
プロジェクトに jest-junit
を追加します。
$ npm install --save-dev jest-junit
jest-junit
は Jest で実行したテスト結果を JUnit 形式にレポートを出力するライブラリです。
jest.config.js
に以下の設定を追加します。
reporters: [
'default',
[
'jest-junit',
{
suiteName: 'jest tests',
outputDirectory: 'reports/jest',
outputName: 'js-test-results.xml',
classNameTemplate: '{classname}-{title}',
titleTemplate: '{classname}-{title}',
ancestorSeparator: ' › ',
},
],
],
いくつか設定に使った項目について触れていきます。
他の設定項目に関しては、README を参照してください。
-
suiteName
testsuites
タグのname
属性に表示する名前を指定します。 -
outputDirectory
テスト結果の出力ディレクトリを指定します。 -
outputName
テスト結果のファイル名を指定します。 -
classNameTemplate
testcase
タグのclassname
属性に表示する名前を指定します。 -
titleTemplate
testcase
タグのname
属性に表示する名前を指定します。 -
ancestorSeparator
Jest のdescribe
ブロックを結合するために使用する文字を指定します。
通常のテストコマンドとは別に CircleCI 用に npm scripts を追加します。
--ci
オプションで CI に最適化され、--runInBand
オプションで実際の仮想化されたビルド環境のみを使用するようになります。
"test:ci": "jest -i --ci --runInBand"
CircleCI の設定
カバレッジを保存する設定
追加した npm run test:ci
コマンドでテストを実行します。
store_artifacts
キーに生成された coverage
ディレクトリを指定すると CircleCI 上へと保存されます。
version: 2.1
jobs:
test:
docker:
- image: circleci/node:12
steps:
- checkout
- run: npm install
- run: npm run test:ci
- store_artifacts:
path: coverage
テスト結果を保存する設定
store_test_results
キーに reports
ディレクトリを指定することで Builds
ページの Test Summary
タブに表示されます。
store_artifacts
キーに指定することで coverage
同様 CircleCI 上へと保存されます。
version: 2.1
jobs:
test:
docker:
- image: circleci/node:12
steps:
- checkout
- run: npm install
- run: npm run test:ci
+ - store_test_results:
+ path: reports
+ - store_artifacts:
+ path: reports
- store_artifacts:
path: coverage
実際に CircleCI 上で実行したテスト結果を確認すると Test Summary
タブでは失敗したテストを見やすく表示してくれます。
成功した場合はスローテストを表示してくれます。
Artifacts
タブでは CircleCI 上に保存したテスト結果ファイルが確認できます。
カバレッジレポートでは HTML ファイルが生成されるため、開くとそのままブラウザから表示できます。
Timing
タブでは、テストのタイミングデータを保存します。
これは、テストを並列実行した際のタイミング解析に用いることができます。
詳しくはドキュメントを参照してください。
さいごに
CircleCI で Jest のテスト結果を取り扱う方法について取り上げました。
デフォルトでは CircleCI 上で長いスクロールをしながら原因を特定する必要がありましたが、これらの設定をすることでテスト結果をページ上部から確認できるようになりとても分かりやすくなりました。
是非これらの設定をしてテストの改善に役立ててみてください。
参考
Generating Code Coverage Metrics - CircleCI
Configuring CircleCI - CircleCI
jest-community/jest-junit: A Jest reporter that creates compatible junit xml files - GitHub