CIでテスト失敗した時に不便だったのでワンライナーで工夫してみた。 TL;DR
force:apex:test:run
はテスト結果を見やすく表示してくれる
デフォルトだと --resultformat human
で出力してくれます。参考: コマンドリファレンス
$ sfdx force:apex:test:run --tests HogeTest.test -w 10
=== Test Results
TEST NAME OUTCOME MESSAGE RUNTIME (MS)
───────────── ─────── ─────────────────────────────────────────────────── ────────────
HogeTest.test Fail System.AssertException: Assertion Failed: テスト失敗しました 12
Class.HogeTest.test: line 4, column 1
force:source:deploy
でテスト失敗したときは教えてくれない
--json
以外に特に結果を出力するようなオプションが見当たりません。参考: コマンドリファレンス
--json
指定するとめっちゃ長い結果JSONが出力されてテスト結果の場所を見つけるのが大変です。
force:source:deploy:report
してもThe metadata deploy operation failed.
くらいしか教えてくれません。
issueも立っていた https://github.com/forcedotcom/cli/issues/57
$ sfdx force:source:deploy -p "force-app/main/default/classes/HogeTest.cls" --testlevel RunSpecifiedTests --runtests HogeTest -w 10 --checkonly
Job ID | 0Af1y000002kGUICA2
SOURCE PROGRESS | ████████████████████░░░░░░░░░░░░░░░░░░░░ | 1/2 Files
$ sfdx force:source:deploy:report -i 0Af1y000002kGUICA2
Job ID | 0Af1y000002kGUICA2
SOURCE PROGRESS | ████████████████████░░░░░░░░░░░░░░░░░░░░ | 1/2 Files
ERROR running force:source:deploy:report: The metadata deploy operation failed.
ワンライナー
--json
の結果を見やすく加工してみます。
※force:source:deploy --json
の結果を > result.json
というファイルに吐き出しています。
ワンライナーと言いつつ長いので見やすく改行しています。
if [ "$?" != "0" ]; then
cat result.json \
| jq -r '.result.details.runTestResult.failures | if type=="array" then .[] else . end | [.name, .methodName, .message, .stackTrace] | @tsv' \
| column -t -s $'\t' \
| grep --color=auto -e '^.*$'
fi
Travis CI上での結果表示はこんな感じになります
解説
-
if [ "$?" != "0" ]; then
: テストに成功するとforce:source:deploy
が終了コード0を返すので成功した場合は特に何もしません。
jqで結果のjsonをバラす
-
.result.details.runTestResult.failures
: resultの中のdetailsの中の
...と辿っていきます。 -
if type=="array" then .[] else . end
: 失敗が1つの場合はobject、複数の場合は配列で返ってくるというひどいフォーマットなので型で判定して結果をバラします -
[.name, .methodName, .message, .stackTrace]
: 欲しい属性だけを配列で取り出してレコード化 -
@tsv
: 最後にタブ区切りにして標準出力で次のパイプに繋げます
参考: https://qiita.com/Nakau/items/272bfd00b7a83d162e3a
columnsコマンドで見やすく整形
column -t -s $'\t'
色を付ける
-
grep --color=auto -e '^.*$'
: CIの結果で目立つようにエラー結果を赤で表示します。