メインコンテンツまでスキップ

グローバルな順序のオーバーライド

RSpecでは、例や例のグループの順序をカスタマイズすることができます。個々のグループについては、:order メタデータを使用して制御することができます。

  • :defined は、定義された順序で例(およびサブグループ)を実行します。
  • :random は、ランダムな順序で実行します。

より特殊なニーズがある場合は、register_ordering 設定オプションを使用して独自の順序を登録することができます。register_ordering:global として登録すると、それがグローバルなデフォルトになり、:order メタデータを持たないすべてのグループ(およびトップレベルのグループを順序付けるためにRSpecが使用する)に適用されます。

特定の例のグループを順序付けて実行する

次の内容で "order_dependent_spec.rb" という名前のファイルがあるとします。

RSpec.describe "examples only pass when they are run in order", :order => :defined do
before(:context) { @list = [] }

it "passes when run first" do
@list << 1
expect(@list).to eq([1])
end

it "passes when run second" do
@list << 2
expect(@list).to eq([1, 2])
end

it "passes when run third" do
@list << 3
expect(@list).to eq([1, 2, 3])
end
end

次のコマンドを実行すると、rspec order_dependent_spec.rb --order random:1 ですべての例がパスするはずです。

カスタムな順序の登録

次の内容で "register_custom_ordering_spec.rb" という名前のファイルがあるとします。

RSpec.configure do |rspec|
rspec.register_ordering(:reverse) do |items|
items.reverse
end
end

RSpec.describe "A group that must run in reverse order", :order => :reverse do
before(:context) { @list = [] }

it "passes when run second" do
@list << 2
expect(@list).to eq([1, 2])
end

it "passes when run first" do
@list << 1
expect(@list).to eq([1])
end
end

次のコマンドを実行すると、rspec register_custom_ordering_spec.rb ですべての例がパスするはずです。

カスタムなグローバルな順序の使用

次の内容で "register_global_ordering_spec.rb" という名前のファイルがあるとします。

RSpec.configure do |rspec|
rspec.register_ordering(:global) do |items|
items.reverse
end
end

RSpec.describe "A group without :order metadata" do
before(:context) { @list = [] }

it "passes when run second" do
@list << 2
expect(@list).to eq([1, 2])
end

it "passes when run first" do
@list << 1
expect(@list).to eq([1])
end
end

次のコマンドを実行すると、rspec register_global_ordering_spec.rb ですべての例がパスするはずです。