2011-01-06 9 views
1

私は、他のファクトリーとの関連付けを含む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列に一意性制約があります)

そこで質問です:既存のロールファクトリが存在しない場合はロールファクトリを作成し、存在しない場合は既存のロールファクトリを使用するように指定するにはどうすればよいですか?

答えて

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にロールを渡すことができます。しかし、私はそれが面倒だとわかります。

関連する問題