TL; DR
CodeBuild のテストレポート生成コマンドは、 build
または post_build
シーケンスの commands
セクションで指定しましょう。
そうしないと、テスト失敗時にテストレポートを表示してくれません。
はじめに
CodeBuild に、テストレポート機能がリリースされて久しいですね。
僕も、既にいくつか記事を書いていますが、テストカバレッジが表示できるようになり、使いやすさに拍車がかかりました。
- CodeBuildのテストレポート機能が一般公開されたから使ってケチつけてみた - Qiita
- CodeBuildのテストレポート機能でコードカバレッジレポートがサポートされたから、また使ってケチつけてみた - Qiita
そんな便利なテストレポート機能ですが、何度か使っていくうちに、とある現象に気付いたので、記述していきます。
テストレポート生成コマンドを指定できるのは build
または post_build
だけ?
ドキュメントに記載されている、次の文言を見つけました。
build
またはpost_build
シーケンスのcommands
セクションで、レポートグループに対して指定したテストケースを実行するコマンドを指定します。
これが何を意味するのかというと、 buildspec.yml ファイルにおいて、次のように記述する必要があることを意味します。
つまり、 CodeBuild では、テストレポート生成コマンドである npm run test
を、 build
または post_build
シーケンスの commands
セクションで指定するように要求しているわけです。
version: 0.2
phases:
install:
commands:
- npm install
pre_build:
commands:
# この pre_build シーケンスではテストレポート生成コマンドを指定しない
- npm run test
build:
commands:
# この build シーケンスか、
- npm run test
post_build:
commands:
# この post_build シーケンスでテストレポート生成コマンドを指定する
- npm run test
しかし、テストレポート生成コマンドを pre_build
シーケンスで指定しても、テスト成功時には CodeBuild のテストレポートに表示されます。
この現象は、単純にドキュメントの不備なのかと軽く思っていたのですが、別の問題で明らかになりました。
テストレポート生成コマンドを pre_build
で指定するとテストレポートが表示されない
しばらくして、テストが失敗してしまうと、なぜか CodeBuild のテストレポートに表示されない問題にぶつかりました。
いろいろ試行錯誤した結果、どうやら pre_build
では、テスト失敗時のテストレポートファイルを、 CodeBuild のテストレポート機能が読取ってくれないようです。
version: 0.2
phases:
install:
commands:
- npm install
pre_build:
commands:
# pre_build でテストが失敗すると、失敗結果がテストレポートとして読取ってくれない
- npm run test
build:
commands:
# build か post_build でテストが失敗すると、失敗結果がテストレポートとして読取ってくれる
- npm run test
テストレポートは、成功時であっても失敗時であっても表示してほしいため、テスト失敗時にテストレポートを表示しない事象に遭遇してしまった際は、非常に焦りました。
最初は npm run test
失敗結果(利用している Jest コマンドの失敗結果)である Error Code 1 に未対応なのかなーと、的外れなところを調べていました。
- node.js - npm error ELIFECYCLE while running the test - Stack Overflow
- npm ERR! code ELIFECYCLE if 1 test fails · Issue #7803 · facebook/jest
おわりに
少しは仕様書を信じようと思いました。