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)正在运行,因为validation(以及其他function)工作正常。 我怀疑这个问题是因为它在任何实际测试之外被调用(即specifyit等)。

有关如何使其工作的任何想法?

这里的model是未知的,因为它只在specs块上下文中进行了评估。

做类似的事情:

 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 

顺便说一句, 这里有一个很好的阅读 。

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

 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