2012-12-12 49 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