Help us understand the problem. What is going on with this article?

sfdx force:source:deployで失敗したテスト結果を見やすく表示するワンライナー

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上での結果表示はこんな感じになります

image.png

解説

  • 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の結果で目立つようにエラー結果を赤で表示します。
pomu0325
ubiregi
iPadを活用したSaaS型POSシステム「Ubiregi (ユビレジ)」を開発・提供しています
https://ubiregi.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした