2

有没有办法factory_girl指定关联应该指向的随机实例?例如,我有一个Like对象belongs_tooneUser和 one SocialUnit。我希望工厂Like选择一个随机现有的User和一个随机SocialUnit喜欢的,而不是仅仅生成一个新的。下面的片段类型的作品:

Factory.define :like do |f|
  if User.all.count > 0
    f.user User.all.sort_by{ rand }.first
  else
    f.association :user
  end
end

它确实选择了一个随机用户,但似乎随机用户只被选择了一次,因为运行这个

def create_hauls
  5.times do |i|
    Factory(:haul)
  end
end

用同一个用户创建一堆喜欢。我想这是有道理的……工厂被定义一次,然后被重复使用了很多次。

我可以使用序列来强制随机性;有没有办法在工厂定义中定义它,或者顺序是最好的方法?

谢谢。

4

1 回答 1

7

您想在定义工厂时使用惰性属性而不是定义用户。这将在每次使用工厂时定义用户。

f.user { (User.all.count > 0 ? User.all.sort_by{ rand }.first : Factory.create(:user)) }

于 2010-08-07T13:31:14.200 回答