我有涉及关联到其他工厂的一些factorygirl工厂。例如:

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

的问题是,如果我叫厂(:用户)两次,我得到一个重复错误(有一个唯一性约束的role.name列)

所以,问题是:我怎么指定上面应该创建:如果它不存在的角色工厂,但利用现有的一个,如果它不

有帮助吗?

解决方案

你为什么不使用对工厂的角色名的序列。例如 定义序列角色名等在

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

和定义像厂的作用

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

这样,每一个新的角色将被创建的时间,但有不同的ROLE_NAME。您可以通过创建在每个测试的角色通过角色Factory.build。但我发现很麻烦。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top