2017-06-05 21 views
0

我試圖創建我FactoryGirl工廠,這樣當我打電話FactoryGirl.create(:model_a),任何依賴model_a創建並分配給model_a工廠。但是,由於某種原因,我的方法不起作用,我無法弄清楚爲什麼。FactoyGirl:前(:創建)的行爲不被認可

在我廠的文件,這是我有:

FactoryGirl.define do 
    factory :model_a do 
     before(:create) do 
      FactoryGirl.create(:model_b) 
     end 

     model_b {ModelB.first} 
    end 
end 

現在,當我運行FactoryGirl.create(:model_a)我希望它可以先創建工廠model_b(因爲前(:創建)通話),然後再回到創建工廠model_a和分配工廠model_bmodel_b relationshionship爲model_a

但是,我得到錯誤model_b must exist, model_b cannot be blank

爲什麼工廠model_b沒有被創建以便我可以使用它?

回答

0

您需要在before(:create)塊內設置model_amodel_b之間的關聯。例如:

FactoryGirl.define do 
    factory :model_a do 
    # add model_a attributes as needed 

    before(:create) do |model_a| 
     model_a.model_b = ModelB.first || FactoryGirl.create(:model_b) 
    end 
    end 
end 

或者,每個操作的評論:

factory :model_a do 
    # add model_a attributes as needed 
    model_b { ModelB.first || FactoryGirl.create(:model_b) } 
end 
+0

好了,現在有沒有在這樣做,並做'FactoryGirl.define任何差異都 廠:model_a做 #添加model_a屬性爲需要 model_b = ModelB.first || FactoryGirl.create(:model_b) end end' –

+0

對不起,我似乎無法弄清楚如何在評論中做一個換行符,它只是發佈評論......但是這樣做有什麼區別嗎?只需在before(:create)函數之外以同樣的方式設置** model_b **屬性?像這樣:'model_b {ModelB.first || FactoryGirl.create(:model_b)}' –

+0

不,應該有效。好一個!答案已更新。 – mmichael