Rspec可以在循环构造中使用实例变量吗?

时间:2014-10-30 20:20:47

标签: ruby rspec

我正在尝试使用Rspec来循环一系列非常相似的测试,但现在它并不适合我。我有状态的哈希,我想测试所有状态,但我不知道它们的顺序,所以我把它设置成这样:

before(:all) do
  @hash = {
    state_1 => {'item1' => 'a', 'item2' => 'b', 'item3' => 'c'},
    state_2 => {'item1' => 'd', 'item2' => 'e', 'item3' => 'f'},
    state_3 => {'item1' => 'g', 'item2' => 'h', 'item3' => 'i'}
  }
end

until @hash.empty? do
  context 'code does some stuff' do
    before(:all) do
      @state = <result of state determining function>
      @item1 = @hash[@state]['item1']
      @item2 = @hash[@state]['item2']
      @item3 = @hash[@state]['item3']
    end
    it 'does some stuff' do
      ...
    end
    after(:all) do
      @hash.delete(@state)
    end
  ...
end

然而,当我运行我的rspec测试时,我得到一个错误,即没有方法'空?'为零:NilClass。所以问题是,我做错了什么,以及做这种事情的首选方式是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

您好像希望使用let,为每个上下文重新创建变量