如何设置 RSpec 以最后且仅当所有其他测试都通过时才测试功能

How to setup RSpec to test features last and only if all other tests pass

像许多非 greenfeild 项目一样,我到达新工作时发现大多数测试都是使用功能规范而不是 controller/model 规范执行的。当然,这意味着测试需要很长时间才能执行。

有没有一种方法可以设置 RSpec,以便我的功能测试 运行 最后 - 如果所有其他测试首先成功,它们只会 运行。我正在将应用程序迁移到控制器测试以加快执行速度,但如果模型验证出现问题或我的控制器之一被破坏,则无需等待 15 分钟来完成功能测试。

我想做的事情可行吗?

(我现在 运行 在 RubyMine 中进行测试;但如果需要,我可以转到 rake spec)。

虽然我自己还没有实际尝试过,但通读文档后发现可以按照您的意愿进行操作。

将以下内容添加到您的 spec_helper.rb 以覆盖全局排序并强制 rspec 在第一次失败时失败。

RSpec.configure do |config|
  config.register_ordering :global do |examples|
    feature, other = examples.partition do |example|
      example.metadata[:type] == :feature
    end
    other + feature
  end

  config.fail_fast = true
end