社内でもじわじわと Rails 4 の利用が広がっています。
弊社ではCIサーバに Jenkins を使用していますが、Rails プロジェクトのテスト結果を Jenkins で整形して表示するには、Ruby のテストフレームワークの出力を JUnit 形式の XML に変換してくれる ci_reporter が便利です。
しかし Rails 4 の場合、現状ドキュメントに書いてあるとおりに設定してもうまくいかないようです。そこで、試行錯誤してうまくいった方法をここで紹介します。なお、この記事で使用したバージョンは下記のとおりです。テストフレームワークは Rails 標準の ActiveSupport::TestCase を使います。
| Ruby | 2.0.0-p0 |
| Ruby on Rails | 4.0.0.rc1 |
| ci_reporter | 1.8.4 |
| Jenkins | 1.504 |
*** Gemfile
まず、Gemfile
に ci_reporter
を追加します。
>||
gem ‘ci_reporter’, :group => :test
||<
*** Rake の設定
次に、lib/tasks
ディレクトリに以下のスクリプトを設置します。
lib/tasks/ci_reporter.rake
>||
require ‘ci/reporter/rake/minitest_loader’
||<
ci_reporter のドキュメントでは ci/reporter/rake/minitest
を require
して rake ci:setup:minitest
するようにと書かれているのですが、うまく動かないようなので ci:setup:minitest
タスクが行う ci/reporter/rake/minitest_loader
の読み込みをユーザ定義の Rake タスクのファイルの中で行うように設定しています。
あとはいつも通り rake test
すると、 test/reports
ディレクトリに JUnit 形式の XML ファイルが出力されます。
>||
$ rake test
||<
*** Jenkins の設定
Jenkins側では、Jenkins Rake Plugin を使ってビルド時に rake test を実行させるように設定します。
そして「ビルド後の処理」に「JUnitテスト結果の集計」を追加し、テスト結果の XML のパスを設定します。ここは JUnit を使う場合と同じですね。
投稿者紹介
- サーバ運用もできるプログラマと化した、2013年入社の元新人エンジニアです。
最近のエントリ
- 勉強会2017.03.10ユニキャストの勉強会のご紹介
- Ruby2014.05.16[ruby-install] Rubyのバージョン切替えスクリプトを書いた
- CentOS2014.05.14OpenLDAPサーバーを構築する
- Ruby2013.12.17AutomaticRubyとChatWorkを連携させる