Factory Girl Newbie: называть (не создавать) существующую фабрику как ассоциацию - PullRequest
1 голос
/ 06 января 2011

У меня есть фабрики фабрикантов, которые связаны с другими фабриками. Например:

FactoryGirl.define do
  factory :user do |f|
    f.sequence(:email) { |n| "user#{n}@example.com" }
    f.password "foobar"
    f.password_confirmation { |u| u.password }
    f.role_id 2
    f.association :role, :factory => :role
  end
end

Проблема в том, что, если я дважды вызываю Factory (: user), я получаю ошибку дублирования (есть ограничение уникальности для столбца role.name)

Таким образом, вопрос заключается в следующем: как мне указать, что приведенное выше должно создать фабрику: role, если она еще не существует, но использовать существующую, если ее нет?

1 Ответ

1 голос
/ 11 января 2011

Почему вы не используете последовательность в имени фабричной роли. Например определить последовательность для имени роли, как в

FactoryGirl.sequence :role_name do |n|
    "role#{n}"
  end

и определите роль Фабрики как в

  factory.role do |role|
     f.name Factory.next :role_name
  end

Делая это, каждый раз будет создаваться новая роль, но с другим именем роли. Вы можете передать роль в Factory.build, создав ее в каждом тесте. Но я нахожу это громоздким.

...