указание объекта случайной ассоциации в определении factory_girl - PullRequest
2 голосов
/ 07 августа 2010

Есть ли способ в factory_girl указать случайный экземпляр, на который должна указывать ассоциация?Например, у меня есть Like объект, который belongs_to один User и один 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

создает кучулайков всех с одним и тем же пользователем.Я думаю, это имеет смысл ... фабрика определена один раз, а затем многократно использована.

Я мог бы использовать последовательность, чтобы вызвать случайность;Есть ли способ определить его в рамках определения фабрики, или последовательность является лучшим способом сделать это?

Спасибо.

1 Ответ

7 голосов
/ 07 августа 2010

Вы хотите использовать ленивый атрибут вместо определения пользователя, когда определена фабрика. Это будет определять пользователя каждый раз, когда вместо него используется фабрика.

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

...