3

我让我们的 RSpec 套件以随机顺序运行,以确保独立性和稳健性。但是,在某些情况下,我想按顺序运行规范。我知道我只能--order default在命令行上使用,但我想将它与 CI 集成。我们使用 TDDium 进行 CI,我想尝试继续在 CI 服务器上随机运行,但要确保特定的规范文件按顺序运行。

问题

有没有办法在逐个文件的基础上指定 RSpec 应该以默认顺序运行该文件?我看到似乎有一些定制的订购策略支持合并到 rspec-core中,但这似乎并没有完全成熟(我不确定它是否支持before :all),我仍在努力解决它.

讨论

而且,由于还有另一个问题因为“规范应该是独立的”而被否决,所以让我陈述我的用例,试图先发制人地避免“你不应该这样做”的论点。

我们有一个复杂的模型,其中系统状态的各个方面会随着时间而变化。我有一个分析系统,它正在监视该系统以跟踪各种事物随时间的状态变化。多亏了Timecop gem,我可以回到过去,创建一堆交互模型,然后逐步查看,比如 5 天,在已知条件下,每天查看分析系统所看到的系统。具体来说,在系统中嵌入假设的情况下,确保某些计算是正确的。

现在,我意识到我可以有 5 个单独的描述块,每个都经历为历史上 5 天中的每一天设置单独条件的过程,但是对我来说,逐步穿越时间并观察条件变化更有意义在那个状态。更高效,更贴近系统中实际发生的事情。我知道我可以在这里和那里模拟各种响应,我们这样做,但我有兴趣逐步完成基础系统和分析系统之间的“实时”交互。

4

2 回答 2

2

我应该只阅读规范,而不是rspec core 中合并功能的代码。鉴于此规范,这很清楚。

给定一个 custom_ordered_spec.rb:

    RSpec.configure do |config|
      config.order_groups_and_examples do |list|
        list.sort_by { |item| item.description }
      end
    end

    describe 'group B' do
      specify('group B example D')  {}
      specify('group B example B')  {}
      specify('group B example A')  {}
      specify('group B example C')  {}
    end

    describe 'group A' do
      specify('group A example 1')  {}
    end

组和组内的示例都将按描述排序。此外,看起来您可以调用config.order_groupsand config.order_examples

这是我的博客文章,其中有更详细的描述。

于 2012-10-24T00:34:13.797 回答
0

当前 (3.5) Rspec 不再具有 order_groups_and_examples 方法。相反,您可以注册订购

RSpec.configure do |config|
  config.register_ordering :alphabetical do |list|
    list.sort_by { |item| item.description }
  end
end
RSpec.context "Test in alphabetic order", :order => :alphabetical  do
  describe 'group B' do
    specify('group B example D')  {}
    specify('group B example B')  {}
    specify('group B example A')  {}
    specify('group B example C')  {}
  end

  describe 'group A' do
    specify('group A example 1')  {}
  end
end
于 2017-03-23T12:54:29.160 回答