2011-01-06 57 views
1

我有一些工廠女工廠涉及到其他工廠的協會。例如:工廠女孩新手:調用(不創建)作爲一個協會的現有工廠

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列唯一性約束)

所以,問題是:我如何指定上面應該創建:角色工廠,如果它尚不存在,但使用現有的,如果它不?

回答

1

爲什麼不在工廠角色名稱上使用序列?例如 定義角色名的序列,例如在

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

,並定義像

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

廠角色通過這樣做,每一個新的角色將被創建的時間,但有不同的ROLE_NAME。您可以通過在每個測試中創建角色將角色傳遞給Factory.build。但我覺得很麻煩。