RSpec のソース コードを調べてみたところ、次のように動作することがわかりました。このコードを、spec_helper.rb
またはテストの実行時に読み込まれる他のファイルに入れるだけです。
RSpec.configure do |config|
config.after(:suite) do
examples = RSpec.world.filtered_examples.values.flatten
if examples.none?(&:exception)
# change the seed here
end
end
end
ハッシュはRSpec.world.filtered_examples
、サンプル グループをそのグループのサンプルの配列に関連付けます。Rspec には特定の例を除外する機能があり、このハッシュには実際に実行された例のみが含まれているようです。
システムをセットアップする別の方法の 1 つは、rspec プロセスのリターン コードをチェックすることです。0 の場合、すべてのテストに合格し、シードを変更できます。
シェル スクリプトでは、シードを変更して実行するコマンドを定義できます。
rspec && change_seed
プロジェクトに Rakefile がある場合、次のように設定できます。
task "default" => "spec_and_change_seed"
task "spec" do
sh "rspec spec/my_spec.rb"
end
task "spec_and_change_seed" => "spec" do
# insert code here to change the file that stores the seed
end
spec が失敗した場合、rake の「spec」タスクは失敗し、シードの変更は続行されません。