【问题标题】:Rspec and FactoryGirl: SystemStackError: stack level too deepRspec 和 FactoryGirl:SystemStackError:堆栈级别太深
【发布时间】:2012-11-30 06:37:05
【问题描述】:

我对 FactoryGirl 有疑问:

这是我的 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:堆栈级别太深”。

如何在不破坏关联的情况下解决这个问题?

【问题讨论】:

    标签: ruby-on-rails rspec factory-bot


    【解决方案1】:

    您收到“堆栈级别太深”错误,因为您正在根据彼此定义两个工厂。您不需要question 工厂中的association :task, factory: task 行——关联将在您创建任务时设置。

    为您的task 工厂试试这个:

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

    【讨论】:

    • 如果我想实例化一个像create(:question) 这样的question 对象怎么办(它应该有一个关联的task)?
    • 创建一个任务,然后使用task.questions.first获取问题。
    • 看起来很奇怪。直接创建question 比创建task 更明显。
    • 然后创建一个带有正常任务关联的问题,并在您的task 工厂中定义一个task_with_questions 工厂,其中task 作为其父级,after(:create) { |t| FactoryGirl.create(:question, task: t) }。然后你得到两个。
    猜你喜欢
    • 2012-03-04
    • 2013-10-05
    • 2016-09-10
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2011-11-17
    相关资源
    最近更新 更多