覆盖全局排序

您可以自定义 RSpec 如何排序示例和示例组。对于单个组,您可以通过使用 `:order` 元数据标记来控制它。

* `:defined` runs the examples (and sub groups) in defined order
* `:random` runs them in random order

如果您有更专门的需求,您可以使用 `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`

那么所有示例都应该通过。