工場勤務の女の子の初心者:既存のファクトリを関連付けとして呼び出す (作成しない)

StackOverflow https://stackoverflow.com/questions/4615925

  •  26-09-2019
  •  | 
  •  

質問

他の工場との連携を伴う工場女子工場がいくつかあります。例えば:

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) を 2 回呼び出すと重複エラーが発生することです (role.name 列には一意性の制約があります)。

そこで質問は次のとおりです。上記で :role ファクトリがまだ存在しない場合は作成し、存在しない場合は既存のものを使用するように指定するにはどうすればよいですか?

役に立ちましたか?

解決

なぜあなたは工場出荷時のロール名にシーケンスを使用してはいけません。例えば

のようにロール名のシーケンスを定義します
FactoryGirl.sequence :role_name do |n|
    "role#{n}"
  end

のように工場の役割を定義します
  factory.role do |role|
     f.name Factory.next :role_name
  end

これを行うことにより、それぞれの時間は、新しい役割が作成されますが、異なるROLE_NAMEとなります。あなたは、各テストにおける役割を作成することにより、Factory.buildにロールを渡すことができます。しかし、私はその面倒を見つけます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top