グローバルな順序のオーバーライド
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
ですべての例がパスするはずです。