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_error
をfalse
にして(異常終了しないようにして)それを防いでいます。