Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@pomu0325

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

More than 1 year has passed since last update.

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の結果で目立つようにエラー結果を赤で表示します。
0
Help us understand the problem. What is going on with this article?
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
pomu0325
ubiregi
iPadを活用したSaaS型POSシステム「Ubiregi (ユビレジ)」を開発・提供しています

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?