Edited at

Serverspecで複数ホストのテストをする時、途中でfailしても、最後までspecを実行させる。

More than 5 years have passed since last update.


Rspec::Core::RakeTask#fail_on_errorをfalseにする

これで途中でfailするexampleがあっても最後まで全ホスト分のspecを実行してくれます。



Rakefile

namespace :serverspec do

task :all => properties.keys.map {|key| 'serverspec:' + key.split('.')[0] }
properties.keys.each do |key|
desc "Run serverspec to #{key}"
RSpec::Core::RakeTask.new(key.split('.')[0].to_sym) do |t|
ENV['TARGET_HOST'] = key
t.pattern = 'spec/{' + properties[key][:roles].join(',') + '}/*_spec.rb'

# 途中でfailしてもspec実行を続ける
t.fail_on_error = false
end
end
end



ちなみに

実は、本件はServerspecと直接関係がありません。

Rakeコマンド(プロセス)とRakeタスクの関係です。

例のRakefileでは、

複数ホストへのServerspecを

1ホスト=1Rakeタスク

として、テストしたいホストの数だけRspecのRakeタスクを実行します。

デフォルトではfailするexampleがあると、そのRakeタスクが異常終了して

Rakeコマンドがabortしてしまうので

fail_on_errorfalseにして(異常終了しないようにして)それを防いでいます。


参考