RSpec - 测试之外的未初始化变量

时间:2012-05-15 21:52:05

标签: ruby-on-rails rspec

抱歉,我不知道如何更好地说出标题,但这里是我测试的一般概念:

describe Model do
  let(:model) { FactoryGirl.create(:model) }
  subject { model }

  it { should be_valid }

  model.array_attribute.each do |attribute|
    context "description" do
      specify { attribute.should == 1 }
    end
  end
end

问题是在model.array_attribute.each do |attribute|行,我得到一个未定义的局部变量或方法model的错误。我知道let(:model)正在运行,因为验证(除其他外)工作正常。我怀疑这个问题是因为它在任何实际的测试之外被调用(即。specifyit等。)

有关如何使其发挥作用的任何想法?

2 个答案:

答案 0 :(得分:1)

model在此未知,因为它仅在规范块上下文中进行了评估。

做类似的事情:

describe Model do
  def model
    FactoryGirl.create(:model)
  end

  subject { model }

  it { should be_valid }

  model.array_attribute.each do |attribute|
    context "description" do
      specify { attribute.should == 1 }
    end
  end
end

BTW,there is a nice read here

答案 1 :(得分:1)

我用以下代码解决了这个问题:

describe Model do
  let(:model) { FactoryGirl.create(:model) }
  subject { model }

  it { should be_valid }

  it "description" do
    model.array_attribute.each do |attribute|
      attribute.should == 1
    end
  end
end