PerlerのRuby日記

Rubyとか

cucumber-railsでpendingがCIで失敗扱いになった話

メモ。

cucumber-railsを入れて、

rails generate cucumber:install

したときにできるconfig/cucumber.ymlが

<%                                                                                                                                     
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"
%>
default: <%= std_opts %> features
wip: --tags @wip:3 --wip features
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip

となって 単に bundle exec cucumber などとするとdefaultプロファイルが使われて、--strict も漏れなく付いてきてしまう。


https://github.com/cucumber/cucumber/wiki/Step-Definitions#pending-steps

--strictがついていると、pendingにしているfeatureがあった時点で、

テスト起動コマンド自体の返り値が0でない値*1が返ってきて、Jenkins氏はこのテストを失敗と見なしてしまう。


なので、ここは素直にCI用のプロファイルを作るのが正しいのではないでしょうか。

jenkins: --format pretty --format junit --out features/reports --tags ~@wip

*1:Kernel.exit(1) if failure