Найдите или создайте запись с помощью ассоциации factory_girl

У меня есть модель пользователя, которая принадлежит к группе. Группа должна иметь атрибут уникального имени. Фабрика пользователей и фабрика групп определяются как:

Factory.define :user do |f|
  f.association :group, :factory => :group
  # ...
end

Factory.define :group do |f|
  f.name "default"
end

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

Есть ли способ указать методу ассоциации factory_girl сначала искать существующую запись?

Примечание: я действительно пытался определить чтобы справиться с этим, но тогда я не могу использовать f.association. Я хотел бы иметь возможность использовать его в таких сценариях Cucumber:

Given the following user exists:
  | Email          | Group         |
  | test@email.com | Name: mygroup |

и это может работать, только если ассоциация используется в определении Factory.

60
задан Slobodan Kovacevic 22 August 2011 в 09:10
поделиться

1 ответ

Я имел подобную проблему и предложил это решение. Это ищет группу по имени и если найдено, что это связывает пользователя с той группой. Иначе это создает группу тем именем и затем связывается с ним.

factory :user do
  group { Group.find_by(name: 'unique_name') || FactoryBot.create(:group, name: 'unique_name') }
end

я надеюсь, что это может полезным для кого-то:)

0
ответ дан 24 November 2019 в 17:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: