2014-03-31 38 views
4

有没有办法让同一工厂有多个版本?例如,一个user工厂。同一工厂的多个版本(FactoryGirl)

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 

是有这样的事情,这样我就可以叫简FactoryGirl.create :user#1 John或FactoryGirl.create :user#2

user工厂是一个我没有实际使用的例子,但我真正的工厂正在使用大量的数据。我发现每次需要其他用户时手动更改大量数据会很麻烦。

回答

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) 
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 

,或者使用特性/遗传给我确切的用户数据,我需要

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 

因为在大多数情况下,我不关心实际的用户名,等等。只是它通过了验证。所以我会看看序列/特征/依赖属性。所以你更少依赖硬编码数据。

相关问题