存根返回多个值的方法 rspec

Ada*_*dam 0 ruby rspec

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

def returns_two_things()
// some logic that computes result1 and result 2
return result1, result2
end
Run Code Online (Sandbox Code Playgroud)

我以为我可以这样存根returns_two_things

allow(@my_foo_instance).to receive(:returns_two_things) \
  .and_return("foo", "bar")
Run Code Online (Sandbox Code Playgroud)

但只有“foo”被返回。我认为该and_return方法用于告诉 rspec 第一次returns_two_things调用时返回“foo”,第二次调用时返回“bar”。这就是returns_two_things我在尝试测试的代码中调用的方式

result1, result2 = @my_foo_instance.returns_two_things()
Run Code Online (Sandbox Code Playgroud)

如何让 rspec 从存根函数返回两个值?

the*_*tor 5

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

所以正确的存根方法是:

allow(@my_foo_instance).to receive(:returns_two_things) \
  .and_return(["foo", "bar"])
Run Code Online (Sandbox Code Playgroud)