我一直在遇到同样的问题,如果我是唯一遇到这种情况的人并希望有人有更好的方法,我会感到惊讶。当我创建具有依赖工厂(关联)的工厂时,不会使用已添加的模型更新父模型。可能更容易在代码中解释。
说我有:
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)
强制刷新。
然而,在我的测试中每次都这样做真的不太理想,特别是当它测试的代码不应该依赖它时。
答案 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