2014-04-23 53 views
0

所以,我似乎有在Factory_Girl协会不加载

的has_many关联一些困难我有四个班,协会:

  • Aaa级的has_many商务改善局& CCCS
  • BBB belongs_to的AAA & DDD
  • Ccc belongs_to aaa & ddd
  • Ddd has_many bbbs &个CCCS

这里是类

规格\工厂\ aaas.rb

FactoryGirl.define do 
    factory :aaa do 
    end 
end 

规格\工厂\ bbbs.rb

FactoryGirl.define do 
    factory :bbb do 
    aaa 
    ddd 
    end 
end 

规范\ factories \ cccs.rb

FactoryGirl.define do 
    factory :ccc do 
    aaa 
    ddd 
    end 
end 

规格\工厂\ ddds.rb

FactoryGirl.define do 
    factory :ddd do 
    end 
end 

这里是我正在

规格\模型测试\ aaa_spec.rb

require 'spec_helper' 

describe Aaa do 
    it "works" do 
    aaa = FactoryGirl.create(:aaa) 
    puts aaa 
    puts aaa.bbbs # This shows up as [] 
    puts aaa.cccs # This shows up as [] 
    aaa.bbbs.each {|bbb| puts bbb.ddd} # This is nil 
    aaa.cccs.each {|ccc| puts ccc.ddd} # This is nil 
    end 
end 

为什么不是aaa.bbb s,aaa.cccs,还是ddds出现?

回答

1

原因很简单:在你的工厂还没有创建任何BBB的或CCC的,让你在“0对象”(这是一个完全合法的状态的情况下是“有很多” ...

如果你也想在你的工厂要创建这些对象,你可以像

after(:build) do |aaa, evaluator| 
    aaa.bbb << build(:bbb) 
    aaa.ccc << build(:ccc) 
end 

讲一下你的AAA工厂

0

aaas.rb

FactoryGirl.define do 
    factory :aaa do 
    after(:create) do |aaa| 
     create_list(:bbb, 1, aaa: aaa) 
     create_list(:ccc, 1, aaa: aaa) 
    end 
    end 
end 

得到bbbs.rb和cccs.rb

ddds.rb可以保持原样摆脱aaa的。