RSpec Stub在循环中使用相同的方法

jos*_*eir 1 ruby rspec stub

使用RSpec,我想:

expect(Thing).to receive(:status)
                .with(for: 'something')
                .and_return('down')
Run Code Online (Sandbox Code Playgroud)

在第一次迭代中,相同的存根应该在第二次迭代时返回不同的返回:

expect(Thing).to receive(:status)
                .with(for: 'something')
                .and_return('up')
Run Code Online (Sandbox Code Playgroud)

在测试以下代码片段时:

2.times do |i|
  break if Thing.status(for: 'something') == 'up'
  sleep 2
  raise MyError if i > 0
end
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Ser*_*sev 6

只需存根一次并提供所有返回值.

expect(Thing).to receive(:status)
                .with(for: 'something')
                .and_return('down', 'up')
Run Code Online (Sandbox Code Playgroud)

第一次status被召唤,它将返回'down'.第二次它会回来'up'.