如何继续种子RSpec跑步?
有没有办法从特定点而不是从一开始重新启动种子运行 在进行可能影响大型代码库中所有文件(例如)的更改时,我希望运行一整套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
$ 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
。最初我们打算为文件路径提供默认值(我非常支持它),但当我们无法写入时(因为我们无法保证我们能够写入默认选择的任何文件路径),在确定正确的用户体验时遇到了问题。如果您想了解详细信息,可以在上阅读对话。