factory_girl - has_many关系并刷新父模型

时间:2011-03-08 14:53:12

标签: factory-bot

我一直在遇到同样的问题,如果我是唯一遇到这种情况的人并希望有人有更好的方法,我会感到惊讶。当我创建具有依赖工厂(关联)的工厂时,不会使用已添加的模型更新父模型。可能更容易在代码中解释。

说我有:

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在伦敦甚至San Fran创建之前被实例化,并且因为company.offices.new不用于创建新模型,公司模型从未更新过。

我能够解决这个问题的唯一方法是按如下方式编写测试:

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

强制刷新。

然而,在我的测试中每次都这样做真的不太理想,特别是当它测试的代码不应该依赖它时。

1 个答案:

答案 0 :(得分: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