Rspec - 让行为不一致

时间:2014-08-15 05:35:46

标签: rspec

有人可以向我解释一下吗?

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变量(这是一个哈希)不是?

我需要一个示例来存储结果以供在另一个示例中使用。这样做的首选方法是什么?

1 个答案:

答案 0 :(得分:0)

考虑到这一点,这是有道理的。当你使用包含空哈希的let声明一个变量时,无论何时调用该变量都会被懒惰地初始化,就像使用let定义的任何其他变量一样。仅仅因为在一个示例中填充空哈希,并不意味着变量得到更新或重新定义。当下一个示例调用该变量时,它会按照定义进行初始化,并使用空哈希。

就跨例子共享数据的最佳实践而言,我最终使用了一个定义了@ test_data = {}的before块。然后,我从一个示例中使用我需要的数据填充该哈希,以便跨示例提供。不知道这是首选还是可接受。欢迎其他建议。