Posted at

Travis CIとxcprettyを併用すると正しくレポートされないときの対処

More than 5 years have passed since last update.


xcpretty

https://github.com/supermarin/xcpretty

コマンドラインからiOSのテストを実行すると長々とログが出るのでキレイに整形してくれるツール

$ gem install xcpretty

$ xcodebuild [flags] | xcpretty -c


Travis CI

https://travis-ci.org/

CIのホスティングサービス。自分でjenkins管理するのは辛いけどきちんとテストしたい!といったときに使う。

githubのプルリクエストとかにそのブランチの最新のテスト結果を表示してくれる。

実行したいコマンドは.travis.ymlというyamlファイルをgitリポジトリのルートに配置する。

例えば上記のxcprettyを使ったコマンドの場合

script:

- xcodebuild [flags] clean build test | xcpretty

上記のように記述します。


xcprettyとTravis CIを併用する

このTravis CIとxcprettyを併用すると、レポート結果がうまく出力されないことがあります。

具体的にはテスト自体はこけているのにtravisからはsuccessとしてレポートされてしまいます。

この点についてはこちらの記事

http://qiita.com/radioboo/items/bb3bba734a68f0c25c81

やxcprettyのgithub

https://github.com/supermarin/xcpretty#usage

などで言及されているようにPIPESTATUSを引き継いでexitすればよいとされています。


それでも直らない場合

上記の様に.travis.ymlを

script:

- xcodebuild [flags] clean build test | xcpretty -c && exit ${PIPESTATUS[0]}

としてもテストが失敗する場合があります。

travisの中の人に問い合わせたところ、exitコマンドを直接使うのはTravisと相性がよくないようです。

それを回避するために一枚ラッパスクリプトをかますと良いとのアドバイスを頂きました。

そこで


run_test.sh

#!/bin/bash

xcodebuild [flags] clean build test | xcpretty -c && exit ${PIPESTATUS[0]}


のようなスクリプトを一段用意してやり、.travis.ymlには


travis.yml

  - bash ./run_test.sh


としてやれば、テストの実行結果とレポート結果が同じになります。