ruby - 是否有调试 RSpec (RSpec2) 中顺序相关测试失败的好方法?

标签 ruby unit-testing testing rspec rspec2

很多时候,人们编写的测试在弄乱状态时不会自行清理。通常这无关紧要,因为对于大多数测试而言,对象往往会被拆除并重新创建,但在某些不幸的情况下,对象的全局状态会在整个测试运行期间持续存在,并且当您运行测试时,这取决于和修改那个全局状态,按照某种顺序,他们失败了。

这些测试和可能的实现显然需要修复,但是当相互影响的测试可能不是完整测试套件中唯一的东西时,试图找出导致失败的原因是一件痛苦的事情。当最初不清楚故障是否与顺序相关,并且可能间歇性地或在一台机器上而不是另一台机器上失败时,这尤其困难。例如:

rspec test1_spec.rb test2_spec.rb # failures in test2
rspec test2_spec.rb test1_spec.rb # no failures

在 RSpec 1 中有 some options (--reverse, --loadby)用于订购测试运行,但这些已在 RSpec 2 中消失无论如何,对调试这些问题的帮助微乎其微。

我不确定 RSpec 1 或 RSpec 2 默认使用的顺序,但我过去使用的一个定制设计的测试套件在每次运行时随机排序测试,以便更快地发现这些故障。在测试输出中,用于确定排序的种子与结果一起打印,因此即使您必须做一些工作来缩小套件中导致失败的个别测试的范围,也很容易重现失败。然后有一些选项允许您按顺序在任何给定的测试文件处开始和停止,这使您可以轻松地进行二进制搜索以找到有问题的测试。

我没有在 RSpec 中找到任何这样的实用程序,所以我在这里问:人们找到了哪些调试这些类型的顺序相关测试失败的好方法?

最佳答案

现在有一个 --bisect 标志,它将找到要运行的最小测试集以重现故障。尝试:

$ rspec --bisect=verbose

与它一起使用 --fail-fast 标志可能也很有用。

关于ruby - 是否有调试 RSpec (RSpec2) 中顺序相关测试失败的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5946042/

相关文章:

arrays - 对复杂的 ruby​​ 哈希进行排序工作正常,但无法逆转,我该怎么办?

ruby-on-rails - 回形针上传yml文件

javascript - 使用不同的 beforeEach 多次运行测试

bash - 从包含正斜杠的 bash 中的变量中删除字符串的一部分

mysql - Rails 类方法范围进行额外查询

ruby - 如果数组在每次迭代期间更新,array.each 能否正常工作?

c# - XUnit 如何模拟 IMemoryCache ASP.NET Core

javascript - 如何替换 Polymer 中的元素和 stub 方法

amazon-web-services - 清理测试装置

ruby-on-rails - 覆盖 rails 5 的 Controller 测试脚手架