2012-12-12 48 views
2

我有FactoryGirl一個問題:Rspec的和FactoryGirl:SystemStackError:堆棧層次過深

這裏是我的2個工廠:

FactoryGirl.define do 
    factory :task do 
    ... 
    after(:build) do |task| 
     question = FactoryGirl.create(:question) 
     task.questions = [question] 
    end 
    end 
end 

FactoryGirl.define do 
    factory :question do 
    association :task, factory: :task 
    ... 
    end 
end 

問題工廠創建任務,任務工廠創建問題等。所以,我有一個消息:「SystemStackError:堆棧層太深」。

如何解決此問題而不破壞關聯?

回答

6

由於您定義了兩個工廠之間的相互關係,所以出現「堆棧級別太深」的錯誤。您不需要question工廠中的association :task, factory: task行 - 創建任務時將設置關聯。

試試這個你task工廠:

FactoryGirl.define do 
    factory :task do 
    ... 
    questions { [ FactoryGirl.create(:question) ] } 
    end 
end 
+0

如果我想實例化一個'question'的物體,像'創建(:題)'(它應該有一個相關的'task')? – freemanoid

+1

創建一個任務,然後使用'task.questions.first'來得到問題。 –

+0

它看起來很奇怪。直接創建「問題」而不是創建「任務」更爲明顯。 – freemanoid