工厂女孩协会

nub*_*nub 1 ruby ruby-on-rails factory-bot

我写了一个rspec测试,它在我的rubric中添加了一些单元.

我有两个模型=> Rubric和Units.Rubric有很多单位.它看起来像这样:

@rubric.units.push Factory :text_unit
@rubric.save
Run Code Online (Sandbox Code Playgroud)

然后我找到了factory_girl并尝试将此代码重写为工厂.但它没有用.

我怎么能在Factory Girl中写这个关联.我试过这个:

  factory :common_rubric , :class => :common_info_rubric do |f|
    f.sequence(:name) {|n| "common_info_rubric#{n}"}
  end

  factory :text_unit, :class => text_info_unit do |f|
    f.association :common_rubric_with_unit
    f.sequence(:name) {|n| "text_unit#n}" }
  end

  factory :common_rubric_with_unit , :parent => :common_rubric do |f|
    f.units { |unit| unit.association(:text_info_unit) }
  end   
Run Code Online (Sandbox Code Playgroud)

我总是有错误

SystemStackError:
       stack level too deep
Run Code Online (Sandbox Code Playgroud)

Mar*_*sic 6

你有一个循环参考.当您创建text_unit它时,它会创建一个关联的common_rubric_with_unit.common_rubric_with_unit创建关联的定义text_unit,我们在一开始就回来了.

你需要从任何一方删除其中一个关联,这应该工作:

factory :text_unit, :class => text_info_unit do |f|
  f.association :common_rubric_with_unit
  f.sequence(:name) {|n| "text_unit#n}" }
end

factory :common_rubric_with_unit , :parent => :common_rubric do |f|
end
Run Code Online (Sandbox Code Playgroud)