有没有办法让同一工厂有多个版本?例如,user
工厂。
FactoryGirl.define do
factory :user#1 do
name 'John Doe'
date_of_birth { 21.years.ago }
end
factory :user#2 do
name 'Jane Doe'
date_of_birth { 25.years.ago }
end
end
是否有这样的内容,以便我可以为John致电FactoryGirl.create :user#1
或为Jane致FactoryGirl.create :user#2
?
user
工厂是我实际上没有使用的一个例子,但我的真正工厂正在使用大量数据。我发现每次需要其他用户时手动更改大量数据都很麻烦。
答案 0 :(得分:2)
您不必申报两次
按照
FactoryGirl.define do
factory :user do
name
date_of_bith
end
end
现在动态地你可以打电话
user1 = FactoryGirl.create(:user, name: 'John doe', date_of_birth: 21.year.ago)
user2 = FactoryGirl.create(:user, name: 'Jane doe', date_of_birth: 25.year.ago)
答案 1 :(得分:0)
与提供调用中的所有数据相反,我只是通过使用序列为我提供独特的数据来使我的工厂动态化。
FactoryGirl.define do
factory :mail_user do
mail_domain
account
sequence :userid do |n|
"mailuser-#{n}"
end
passwd "This!sADecentPassword11212"
active :true
filter :false
end
end
或使用traits / inheritance为我提供我需要的确切用户数据
FactoryGirl.define do
factory :administrator do
isp
sequence :email do |n|
"user#{n}@example.com"
end
active true
name "Random Awesome Admin"
password '123Abc#$1'
password_confirmation '123Abc#$1'
trait :inactive do
active false
end
trait :system do
roles [:system_admin]
end
trait :admin do
roles [:admin ]
end
trait :realm do
roles [:realm_admin]
end
trait :helpdesk do
roles [ :helpdesk ]
end
trait :dns do
roles [ :dns_admin ]
end
factory :inactive_administrator, traits: [:inactive]
factory :helpdesk_admin, traits: [:helpdesk]
factory :system_admin, traits: [:system]
factory :admin, traits: [:admin]
factory :realm_admin, traits: [:realm]
factory :dns_admin, traits: [:dns]
end
end
因为在大多数情况下我并不关心实际的用户名等。只是它通过了验证。所以我会看一下序列/特征/依赖属性。这样您就可以减少对硬编码数据的依赖。
答案 2 :(得分:0)
您可以使用sequence
factory :user do
sequence(:name) { |n| "person#{n}" }
sequence(:date_of_birth) { |n| "#{n}".years.ago }
end
如果您想基于验证来生成出生日期,则可以覆盖用于序列的初始值
sequence(:date_of_birth, 15) { |n| "#{n}".years.ago }