@znz blog

ZnZ の memo のようなもの

ci_reporter から rspec_junit_formatter に移行した

| Comments

rspec 2 から rpsec 3 への移行で ci_reporter がうまく動かなくなって困っていたら、 rspec_junit_formatter というのを教えてもらったので、 移行してみました。

対象バージョン

  • ruby 2.1.2
  • rails 3.2.18
  • rspec-rails 3.0.1
  • rspec_junit_formatter 0.2.0

Gemfile の変更

group :testgem 'ci_reporter', require: falsegem 'rspec_junit_formatter' に変更しました。

jenkins で実行しているシェルスクリプトの変更

bundle exec rake -f $(bundle show ci_reporter)/stub.rake ci:setup:rspec default SPEC_OPTS=--no-drb COVERAGE=on のように実行していたのを

1
2
3
4
5
6
rm -rf spec/reports
cat >.rspec <<EOF
--format RspecJunitFormatter
--out spec/reports/rspec.xml
EOF
bundle exec rake COVERAGE=on

に変更しました。 spec/reports は自動で作成してくれるようで、事前に作成しておく必要はないようです。 ci_reporter はタスクの最初の方で spec/reports を削除していたので、同様に削除するようにしました。

COVERAGE=onsimplecov, simplecov-rcov を有効にするかどうかのフラグとして使っているので今回の移行とは無関係です。

RSpec JUnit Formatter の README に書いてある rspec --format RspecJunitFormatter --out rspec.xml という実行方法だとテスト用データベースの初期化関連で問題がおきたので、 rspec コマンド直接ではなく rake コマンドのデフォルトタスクで実行するために、 .rspec ファイルを書き換えるようにしました。 SPEC_OPTS で指定する方法でも良かったかもしれません。

Jenkins の設定

ci_reporter の設定のときに ビルド後の処理JUnitテスト結果の集計 を追加していて、 テスト結果XMLspec/reports/**/*.xml という設定にしていて、 RspecJunitFormatter の出力先の方をそちらにあわせたので、 Jenkins 側の設定は変更していません。

テスト結果

Jenkins のテスト結果の表示では spec.controllersspec.models などがパッケージになっていました。

spec/support/*.rbshared_examples を定義していたら、 spec.support がパッケージになってしまっているのが気になりましたが、 ci_reporter のときはほぼすべてが (root) というパッケージになっていたのに比べると 便利になったように思います。

RSpec::Core::DeprecationError

RSpec.configure do |config|config.raise_errors_for_deprecations! を実行していると

.../gems/rspec-core-3.0.1/lib/rspec/core/formatters/deprecation_formatter.rb:186:in `puts': Treating `metadata[:execution_result]` as a hash is deprecated. Use the attributes methods to access the data instead. Called from .../rspec_junit_formatter-0.2.0/lib/rspec_junit_formatter/rspec3.rb:43:in `result_of'. (RSpec::Core::DeprecationError)`

というエラーになったので、 config.raise_errors_for_deprecations! を外しました。

github の master では直っているので、次のバージョンがリリースされたら解決しそうです。

Comments