2012-05-15 238 views
2

對不起之外未初始化的變量,我不知道如何字標題更好,但這裏是我測試的總體思路: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)正在工作,因爲驗證(除其他外)工作正常。我懷疑這個問題是因爲它被稱爲在任何實際的測試(即,specify,it等)之外。

關於如何使這項工作的任何想法?

回答

1

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 

BTW,there is a nice read here

+0

我居然找到了解決閱讀本之前。發佈它作爲答案。你可以看看它,讓我知道我們的兩個答案是如何比較的,如果你的答案可能比我的解決方案更好? – Nick

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 
+0

這個工作,當然。我想你想分開的規格,這就是爲什麼我保持你的邏輯。 – apneadiving

+0

順便說一句,我的答案旨在讓你明白爲什麼一些變量只能在塊中可見,以及簡單的ruby方法在任何地方都能做到這一點。 – apneadiving

+0

+1這個競爭性的答案:) – apneadiving