是否有一种方法可以重新启动种子RSpec,而不是从一开始就运行?
当进行可能影响大型代码库中所有文件(例如Bundler.require)的更改时,我希望运行一组完整的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可以确定最后一次失败,这样的情况会更好:
$ rspec --seed=0 --continue --fail-fast显然,在一般情况下,使用种子运行并不是一个好的实践,因为测试不应该依赖于顺序,但是它确实允许可重复性,这正是我现在正在寻找的。
发布于 2015-05-28 18:02:56
RSpec不支持--continue标志。在整个套件中,最后一次运行的距离必须在两次运行之间保持一定的状态。它不会这样做(而且我们也没有这样做的计划),但是对于某个人来说,编写这样的扩展是相当容易的。
尽管如此,即将发布的RSpec 3.3包含了一个支持类似但略有不同的工作流的新功能:--next-failure。
https://relishapp.com/rspec-staging/rspec-core/docs/command-line/only-failures
使用--next-failure,您将如何实现与您所要求的工作流类似的工作流:
rspec来运行整个套件。它将记录所有已执行示例的last_run_status,以便知道哪个失败。rspec --next-failure (或者rspec --next-failure --seed 0,如果您想强制执行特定的随机排序,而不是使用定义的顺序)。RSpec将将运行的内容过滤为上次运行时失败的示例,并在失败时立即中止。通过使用rspec重复运行--next-failure,您可以单独处理每个故障,而无需支付运行整个套件的成本。
注意,要使用这个新特性,首先必须配置example_status_persistence_file_path,以便RSpec知道在哪里保存每个示例的最后运行状态。
https://stackoverflow.com/questions/30512280
复制相似问题