如何多次测试yield_control到引发错误的块?

时间:2014-10-22 18:11:18

标签: ruby rspec

我想像RSpec一样使用yield_control匹配器

expect {|b| some_method(&b) }.to yield_control.exactly(5).times

但是,我想要阻止引发错误。是否有RSpec结构允许你这样做?

基本上,我正在寻找像RSpec模拟对象这样的东西,它允许你在块产生时产生错误并计算它产生的次数。

我知道还有其他方法可以通过定义我自己的块来跟踪它被调用的次数,但我希望有一个内置的东西可以这样做。

示例:

def some_method(&block)
  attempt = 0
  begin
    attempt += 1
    yield
  rescue => e
    retry if attempt < 3
  end
end

我想测试当块引发错误时控件产生了一定次数。我知道这是一种方法:

number_of_times = 0
some_method do
  number_of_times += 1
  raise StandardError
end
expect(number_of_times).to eq(3)

但我希望我可以使用expect {..}.to yield_control语法。

1 个答案:

答案 0 :(得分:0)

您是否希望该块引发错误?有一个Rspec匹配器:https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher