2011-03-08 52 views
1

我一直遇到同样的问题,如果我是唯一遇到此问题的人,并且期望有人有更好的方法来做到这一点,我会感到惊讶。当我创建一个具有相关工厂(关联)的工厂时,父级模型不会使用已添加的模型进行更新。可能更容易在代码中解释。factory_girl - has_many关系和刷新父模型

说我有:

Factory.define :company do |a| 
    a.name 'Acme' 
end 
Factory.define :office do |a| 
    a.name 'London' 
    a.association :company, :factory => :company 
end 

,我执行此代码:

london = Factory.create(:office) 
sanfran = Factory.create(:office, :name => 'San Fran' , :company = london.company) 

那么如果我运行这个测试

london.company.offices.count.should eql(2) 

失败,因为公司的Acme是以前实例伦敦甚至是圣弗兰创建,并且因为company.offices.new不用于创建新模型, mpany模型从未更新。

我已经能够解决此问题的唯一方法是写我的测试如下:

london.company(true).offices.count.should eql(2) 

其强制进行刷新。

但是,这在我的测试中每次都做得不是很理想,特别是当它正在测试的代码不应该依赖于此时。

+0

请您提供更多的上下文吗?这些工厂看起来应该是他们应该工作的 - 我正在成功地使用这些工厂 - 所以也许线索在测试中。张贴这些,我会看看。 – 2011-06-01 08:31:22

+0

':company = london.company'是吗?它不应该是':company => london.company' – 2011-06-03 16:37:38

回答

0

有没有理由不能先创建母公司?在创建子对象后,从预先实例化的父项中获取计数似乎没有问题。

describe Company do 
    describe "office associations" do 
    before(:each) do 
     @company = Factory(:company) 
    end 

    it "should have the correct number of offices" do 
     o1 = Factory(:office, :company => @company) 
     o2 = Factory(:office, :company => @company) 
     @company.offices.should =~ [o1, o2].flatten # <= Not sure why, but each call to Factory appears to return an array 
    end 
    end 
相关问题