存根 returns 多个值 rspec 的方法

Stubbing a method that returns multiple values rspec

考虑以下 return 两个值的函数(假设它是与 class Foo 关联的方法):

def returns_two_things()
// some logic that computes result1 and result 2
return result1, result2
end

我想我可以像这样存根 returns_two_things:

allow(@my_foo_instance).to receive(:returns_two_things) \
  .and_return("foo", "bar")

但只有“foo”被 returned。我收集到 and_return 方法用于在第一次调用 returns_two_things 时告诉 rspec 到 return“foo”,第二次调用“bar”。这就是我在尝试测试的代码中调用 returns_two_things 的方式

result1, result2 = @my_foo_instance.returns_two_things()

如何从存根函数中获得 rspec 到 return 两个值?

Ruby 没有多值 returns。代码示例隐式提供了 returns 一个包含 2 个元素的数组,即 return "foo", "bar"return ["foo", "bar"].

相同

所以存根的正确方法是:

allow(@my_foo_instance).to receive(:returns_two_things) \
  .and_return(["foo", "bar"])