工厂女孩新手:作为协会呼叫(不创建)现有工厂

时间:2011-01-06 14:25:35

标签: ruby-on-rails-3 factory-bot

我有一些工厂女工厂涉及到其他工厂的协会。例如:

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列上有唯一性约束)

所以问题是:我如何指定上面应该创建:角色工厂(如果它尚不存在),但如果不存在则使用现​​有工厂?

1 个答案:

答案 0 :(得分:1)

为什么不在Factory角色名称上使用序列。例如 定义角色名称的序列,如

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

并在

中定义Factory角色
  factory.role do |role|
     f.name Factory.next :role_name
  end

通过执行此操作,每次创建新角色但使用不同的role_name。您可以通过在每个测试中创建角色将角色传递给Factory.build。但我发现这很麻烦。

相关问题