我想像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
语法。
答案 0 :(得分:0)
您是否希望该块引发错误?有一个Rspec匹配器:https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher