我有一个函数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
块中定义。
答案 0 :(得分:2)
您所描述的内容无法完成。让块在it
块上下文之外进行评估,并且需要在此之前进行设置。
当您尝试动态定义let
:
let
在示例(例如it
块)中或在示例范围内运行的构造(例如before
,let
中不可用,等等)。它仅适用于示例组(例如describe
或context
块)。
这是因为let
实际上define a method阻止了与let
给出的符号匹配,然后对其进行延迟评估。因此,它需要是rspec的一个新功能,以允许这种类型的基于数组的初始化。