是否有一些程序化的方法可以强制rspec测试在第一次失败时停止?
例如,
如果在任何这些测试中发生某些故障,我想在特定的测试步骤中停止执行该特定测试,该测试步骤失败但不会停止执行我正在运行的整个测试套件。
我知道有以下方法:
RSpec.configure do |c|
c.fail_fast = true
end
但是在我在测试套件中运行的任何规范文件中定义它会导致套件的所有执行失败。
这种情况可以处理吗?
提前致谢
答案 0 :(得分:4)
我知道这是一个老问题,但我偶然发现它同时希望自己实现同样的行为。经过多次徒劳无功的搜索,我想出了一些相当简单的实现方法,它实际上提供了理想的行为!
只需在每个spec文件中添加以下内容,以便在发生异常时跳过后续示例(在该特定文件中):
before :all do
$continue = true
end
around :each do |example|
if $continue
$continue = false
example.run
$continue = true unless example.exception
else
example.skip
end
end
这里的逻辑应该是不言自明的。继续运行示例,直到发生异常,然后跳过该规范的其余示例。每个钩子周围很好地促进了这个逻辑,因为它可以控制每个例子的执行。有关“around”挂钩的更多信息,请参阅RSpec documentation。