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