在存根上的Rspec模拟块没有被产生

时间:2014-02-04 19:29:06

标签: ruby rspec block yield stub

所以我有一个名为retry_with_timeout的方法的两个调用,它接受一个块并执行,直到该块返回true或nil以外的值(即false将导致循环)或直到发生超时

示例类:

def do_the_thing
  retry_with_timeout(10, 5) do
    case something
      when 1
        false
      when 2
        false
      else
         raise
    end
  end

  retry_with_timeout(30, 10) do
    case something_else
      when 1
        false
      when 2
        false
      when 3
        true
      else
         raise
    end
  end
end

Spec class:

it "should pass when the thing is 3" do
  model = test_model #creates a double and stubs all of the necessary common methods

  t_model.stub(:retry_with_timeout).with(10, 5).ordered
  t_model.stub(:retry_with_timeout).with(30, 10).and_yield().ordered

  expect { t_model.do_the_thing }.to be(true)
end

我收到错误,因为“3”情况不在第一个区块中,因此“else”被调用...

我需要跳过第一个并在第二个区块进行评估....我已经尝试了一切,我正在失去我的心灵!任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

好的,所以我已经回答了我自己的问题......原来有些功能没有记录......为了返回产量,必须按照以下方式进行:

t_model.stub(:some_method).and_return("Cool", "Awesome", and_yield(foo))

#Just for informations' sake
t_model.stub(:some_other_method).and_return("FOO", "BAR", raise_error)

由于某种原因,它被添加为退货商品, 在任何地方都没有记录!!!!!