有人可以向我解释一下吗?
describe 'test some stuff' do
let (:dude) {"where's my var"}
let (:container) do {} end
it 'does some stuff' do
puts dude
container[:dude] = dude
puts container
end
it 'does some other stuff' do
puts dude
puts container
end
end
输出
where's my var
{:dude=>"where's my var"}
where's my var
{}
为什么:dude变量(这是一个字符串)在它上面计算块,但是:container变量(这是一个哈希)不是?
我需要一个示例来存储结果以供在另一个示例中使用。这样做的首选方法是什么?
答案 0 :(得分:0)
考虑到这一点,这是有道理的。当你使用包含空哈希的let声明一个变量时,无论何时调用该变量都会被懒惰地初始化,就像使用let定义的任何其他变量一样。仅仅因为在一个示例中填充空哈希,并不意味着变量得到更新或重新定义。当下一个示例调用该变量时,它会按照定义进行初始化,并使用空哈希。
就跨例子共享数据的最佳实践而言,我最终使用了一个定义了@ test_data = {}的before块。然后,我从一个示例中使用我需要的数据填充该哈希,以便跨示例提供。不知道这是首选还是可接受。欢迎其他建议。