我有一些工厂女工厂涉及到其他工厂的协会。例如:
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列上有唯一性约束)
所以问题是:我如何指定上面应该创建:角色工厂(如果它尚不存在),但如果不存在则使用现有工厂?
答案 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。但我发现这很麻烦。