如何继续播种RSpec运行?
How to continue a seeded RSpec run?
有没有办法从特定点而不是从头开始重新启动种子 RSpec 运行?
当进行可能影响大型代码库中所有文件(例如 removing 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
显然 运行 种子通常不是好的做法,因为测试不应该依赖于顺序,但它确实允许可重复性,这正是我现在正在寻找的。
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
如果你想强制一个特定的 运行dom 排序而不是使用定义的顺序)。 RSpec 将过滤掉 运行 上次 运行 失败的例子,一旦失败就会中止。
通过使用 --next-failure
重复 运行ning rspec
,您可以单独解决每个故障,而无需支付 运行ning 整个套件的费用。
请注意,要使用此新功能,您首先必须配置 example_status_persistence_file_path
,以便 RSpec 知道在哪里保留每个示例的最后 运行 状态。
有没有办法从特定点而不是从头开始重新启动种子 RSpec 运行?
当进行可能影响大型代码库中所有文件(例如 removing 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
显然 运行 种子通常不是好的做法,因为测试不应该依赖于顺序,但它确实允许可重复性,这正是我现在正在寻找的。
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
如果你想强制一个特定的 运行dom 排序而不是使用定义的顺序)。 RSpec 将过滤掉 运行 上次 运行 失败的例子,一旦失败就会中止。
通过使用 --next-failure
重复 运行ning rspec
,您可以单独解决每个故障,而无需支付 运行ning 整个套件的费用。
请注意,要使用此新功能,您首先必须配置 example_status_persistence_file_path
,以便 RSpec 知道在哪里保留每个示例的最后 运行 状态。