如何继续种子RSpec跑步?

如何继续种子RSpec跑步?,rspec,Rspec,有没有办法从特定点而不是从一开始重新启动种子运行 在进行可能影响大型代码库中所有文件(例如)的更改时,我希望运行一整套RSpec测试,修复第一个错误,然后使用相同的种子重新运行测试 $ cd myproj $ rspec --seed=0 --fail-fast ... Finished in 9 minutes 59 seconds (files took 12.09 seconds to load) 9999 examples, 1 failure, 0 pending Failed

有没有办法从特定点而不是从一开始重新启动种子运行

在进行可能影响大型代码库中所有文件(例如)的更改时,我希望运行一整套RSpec测试,修复第一个错误,然后使用相同的种子重新运行测试

$ cd myproj
$ rspec --seed=0 --fail-fast

...

Finished in 9 minutes 59 seconds (files took 12.09 seconds to load)
9999 examples, 1 failure, 0 pending

Failed examples:

rspec ./spec/my_class_spec.rb:22 # MyClass #my_method

Randomized with seed 0
此时,我意识到
my_class.rb
缺少一个
require
。我修复了它,但我不想再次运行前面的9998传递示例

我希望能够指定一个起点,如下所示:

$ rspec --seed=0 --from='./spec/my_class_spec.rb:22' --fail-fast
或者,如果rspec is能够确定最后一次故障,类似这样的方法会更好:

$ rspec --seed=0 --continue --fail-fast

显然,使用seed运行通常不是一个好的实践,因为测试不应该依赖于顺序,但它确实允许重复性,这正是我现在想要的。

RSpec不支持
--continue
标志。它必须在两次运行之间保持某种状态,即最后一次运行在整个套件中的距离。它不能做到这一点(我们也没有这样做的计划),但对某些人来说,编写一个扩展来做到这一点是相当容易的

也就是说,即将发布的RSpec 3.3包含了一个支持类似但略有不同的工作流的新功能:
——下一个故障

使用
--next failure
,以下是如何实现与您所要求的类似的工作流:

  • 运行
    rspec
    以运行整个套件。它将记录所有已执行示例的
    上次运行状态
    ,以便知道哪个失败
  • 重复运行
    rspec--next failure
    (或者
    rspec--next failure--seed 0
    ,如果您想强制执行特定的随机顺序,而不是使用定义的顺序)。RSpec将过滤运行的内容,只过滤上次运行失败的示例,并在一个失败时立即中止
  • 通过使用
    --next failure
    重复运行
    rspec
    ,您可以单独解决每个故障,而无需支付运行整个套件的成本


    请注意,要使用此新功能,您首先必须配置
    example\u status\u persistence\u file\u path
    ,以便RSpec知道在何处保存每个示例的上次运行状态。

    下一个失败
    功能将是完美的。我真的很期待3.3!一个建议是:与其使用命令行选项
    示例\u status\u persistence\u file\u path
    ,不如使用允许自定义的
    --persistent status
    (使用默认/推荐/常规路径)和
    --persistent status=my/custom/path
    。最初我们打算为文件路径提供默认值(我非常支持它),但当我们无法写入时(因为我们无法保证我们能够写入默认选择的任何文件路径),在确定正确的用户体验时遇到了问题。如果您想了解详细信息,可以在上阅读对话。