对数组元素使用rspec let

时间:2017-05-16 23:43:48

标签: ruby-on-rails rspec

我有一个函数func,返回一个带有两个参数的数组,我通常使用如下:

heads, tails = func

所以在rspec测试中,我想写

let(:heads, :tails, :draw){ func }

但这引起了例外。我知道我可以放

let(:ans){ func }
let(:heads){ ans.first }
let(:tails){ ans.second }

在rspec中有更简单的方法吗?如果没有,是否有我可以编写的方法调用,例如,

def let_multi(f)
    let(:ans){ f }
    let(:heads){ ans.first }
    let(:tails){ ans.second }
end

然后在测试中

let_multi func

我对let_multi func的尝试不起作用,因为func仅在it块中定义。

1 个答案:

答案 0 :(得分:2)

您所描述的内容无法完成。让块在it块上下文之外进行评估,并且需要在此之前进行设置。

当您尝试动态定义let

时,甚至rspec错误输出都会显示出来
  

let在示例(例如it块)中或在示例范围内运行的构造(例如beforelet中不可用,等等)。它仅适用于示例组(例如describecontext块)。

这是因为let实际上define a method阻止了与let给出的符号匹配,然后对其进行延迟评估。因此,它需要是rspec的一个新功能,以允许这种类型的基于数组的初始化。