1

假设我们有一个需要 5 分钟的测试套件

假设它在 90% 时失败

假设它在 95% 时失败

而不是运行 3 次(一次到 90、一次到 95 和一次 100%)~14 分钟

我想运行它两次(一次从 0 到 90,一次从 90 到 95,一次从 95 到 100,然后一直运行以确保一切正常),如果我很快重新启动它~10- 11 分钟

因此,当它失败时,我想输出规范编号(基于当前测试),然后当我从命令行再次运行时,我需要让它从该编号开始,所以,我如何让 rspec 使用某些东西运行喜欢rspec spec/ --startat 321

4

2 回答 2

2

我不认为这样的事情会起作用,因为 RSpec 默认以随机顺序运行测试,以确保它们不依赖于它们的顺序。也许一个合适的解决方案是记下失败的测试并只运行那些。您可以像这样运行特定测试:

rspec /spec/controllers/example_controller_spec.rb:19

19您的测试所在的线路在哪里。修复所有失败的测试后,您可以重新运行整个测试套件以确保一切正常。

于 2013-07-02T19:43:55.123 回答
1

您遇到的问题可以通过使用--tagrspec 中的选项来解决。您可以将标签应用于失败的组,然后编写一个小脚本以您想要的顺序执行它们。这是标签上的 rspec 文档页面

使用 --tag(或 -t)选项按标签过滤示例。

标签可以是简单的名称或名称:值对。在第一种情况下,带有 :name => true 的示例将被过滤。在第二种情况下,具有 :name => value 的示例将被过滤,其中 value 始终是一个字符串。在这两种情况下,名称都会转换为符号。

标签也可以通过在标签前添加 ~ 来排除示例。例如,~tag 将排除所有标有 :tag => true 的示例,而 ~tag:value 将排除所有标有 :tag => value 的示例。

为了与 Cucumber 语法兼容,标签可以选择以 @ 符号开头,该符号将被忽略。

文档页面中的一些示例:

describe "group with tagged specs" do
  it "example I'm working now", :focus => true do; end
  it "special example with string", :type => 'special' do; end
  it "slow example", :skip => true do; end
  it "ordinary example", :speed => 'slow' do; end
end

这比使用行号或手动排除单个示例更容易。希望这可以帮助。

于 2013-07-02T20:43:22.670 回答