使用 --order 选项

使用 --order 选项来告诉 RSpec 如何对文件、组和示例进行排序。可用的排序方案是 definedrand

defined 是默认值,它按规范文件加载时的定义顺序执行组和示例,但需要注意的是,每个组会在运行其嵌套示例组之前运行其示例,即使嵌套组是在示例之前定义的。

使用 rand 对组和组内的示例顺序进行随机化。嵌套组始终按从顶层到底层的顺序运行,以避免执行 before(:context)after(:context) 钩子不止一次,但各级组的顺序是随机的。

使用 rand,您还可以指定种子。

使用 recently-modified 将最最近修改的文件优先运行。可以将它与 --only-failures 结合使用来查找最新的失败规范。请注意,recently-modifiedrand 是互斥的。

** 示例用法 **

defined 选项仅在配置文件(例如 .rspec)中存储了 --order rand,并且要从命令行覆盖它时才需要。

--order defined
--order rand
--order rand:123
--seed 123 # same as --order rand:123
--order recently-modified

默认顺序是 defined

假设有一个名为“example_spec.rb”的文件,其中包含

RSpec.describe "something" do
  it "does something" do
  end

  it "in order" do
  end
end

我运行 rspec example_spec.rb --format documentation

那么输出应该包含

something
  does something
  in order

顺序可以是伪随机的(此处使用的种子用于修复测试的排序)

假设有一个名为“example_spec.rb”的文件,其中包含

RSpec.describe "something" do
  it "does something" do
  end

  it "in order" do
  end
end

我运行 rspec example_spec.rb --format documentation --order rand:123

那么输出应该包含

something
  in order
  does something

配置自定义排序

假设有一个名为“example_spec.rb”的文件,其中包含

RSpec.configure do |config|
  config.register_ordering(:reverse) do |examples|
    examples.reverse
  end
  config.order = :reverse
end

RSpec.describe "something" do
  it "does something" do
  end

  it "in order" do
  end
end

我运行 rspec example_spec.rb --format documentation --order reverse

那么输出应该包含

something
  in order
  does something

将顺序覆盖为 defined,当设置了其他顺序时

假设有一个名为“example_spec.rb”的文件,其中包含

RSpec.configure do |config|
  config.order = :random
  config.seed = 123
end
RSpec.describe "something" do
  it "does something" do
  end

  it "in order" do
  end
end

我运行 rspec example_spec.rb --format documentation --order defined

那么输出应该包含

something
  does something
  in order