2017-03-31 129 views
1

我遇到的問題特定於與belongs_to和has_many的關係,其中has_many關係至少需要關聯一個關聯。此要求導致我的工廠無法通過我的模型級別驗證,也無法創建。Factory_girl與belongs_to/has_many關聯至少有1個關聯

我的集團模式

Group < ActiveRecord::Base 
    has_many :organizations, dependent: nullify 
    # commenting out the following line will make the tests pass 
    validates :organizations, presence: true 
    ... 
end 

組織模型

Organization < ActiveRecord::Base 
    belongs_to :group 
    ... 
end 

組織廠

FactoryGirl.define do 
    factory :organization 
    name "test organization" 
    end 
end 

最後孩子問題: 集團廠

FactoryGirl.define do 
    factory :group do 
    name "test group" 
    after(:create) do |group| 
     create(:organization, group: group) 
    end 
    end 
end 

,並在我的測試,我宣佈工廠實例:

describe "something happens with a Group" do 
    let(:group) { FactoryGirl.create :group } 

    it "should work" do 
    ... 
    end 
end 

我的測試中返回的錯誤是多種多樣的,但一般都指向FactoryGirl是無法創建Group工廠的實例。例如

# when a test relies on creating an instance of 'Group' 
ActiveRecord::RecordInvalid: 
    Validation failed: Organizations can't be blank 

我使用(回調)創建我的集團工廠的方法是從這個Thoughtbot後https://robots.thoughtbot.com/aint-no-calla-back-girl

還有很多類似的帖子,但所有的人都認爲我發現還有Thoughtbot文檔沒有提到這個特定的用例。提前致謝。

回答

2

如何像

FactoryGirl.define do 
    factory :group do 
    name 'test group' 
    organizations { [association(:organization)] } 
    end 
end 

主要的想法是保存之前建立所需的對象。如果您需要更多,您也可以嘗試build_list

+0

啊!這工作!哇,我厭倦了這一主題的一些變化,但我的語法錯了。很棒,謝謝! – sammms