私はFactoryGirlを初めて使用しており、次のような単純なシナリオを試していますか?そして、私のテストでファクトリーガールは既存のオブジェクトとの関連付けを作成します
factory :female, :class => Gender do
code 'Female'
end
factory :male, :class => Gender do
code 'Male'
end
factory :papas, :class => Customer do
first_name 'Jim'
last_name 'Papas'
association :gender, :factory => :male, :strategy => :build
end
factory :dumas, :class => Customer do
first_name 'Mary'
last_name 'Dumas'
association :gender, :factory => :female, :strategy => :build
end
:Customerクラスがassocation belongs_to
Gender
クラスとgender_id
が存在しなければならないと述べている検証ルールを持っていることを
create(:male)
create(:female)
create(:papas)
create(:dumas)
注意。私はコード上で一意性のためのGender
クラスのバリデーションを持っています。
上記の文create(:papas)
でgender_id
がnil
あるので、私のテストでは、私は、作成されようとしているCustomer
が有効でないというエラーが発生します。
私は性別と:strategy => :build
:papas
Customer
の工場の関連付けを削除すると、私は:papas
を作成しようとすると、性別のコードがすでに存在していること、エラーが発生します。
私のテストでは上記の必要なデータを作成するために何が必要なのですか?
他のテストでも、顧客なしで作成された性別を作成したいと考えています。ファクトリ作成コマンドで顧客を作成し、同時に顧客が性別を作成できるようにしてはいけません。同じ性別の2人の顧客を作成しようとすると、これは機能しません。
また、1より良い答えが存在しなければならない:
@male = create(:male)
@female = create(:female)
create(:papas, :gender => @male)
create(:dumas, :gender => @female)
(備品を使用する場合はこれらの事はすぐに準備ができていた私は、器具に戻りましょう。?)
備品対非常に冗長、あなたの答えが正しいですが。私は最後の2ヶ月の工場の女の子を使っていて、まだ次のプロジェクトには備品があります! –
多くの異なる顧客を作成する必要がある場合は、工場で見つけることができます。あなたはmale_customerファクトリーとfemale_customerファクトリーを持ち、それらを異なる顧客の親ファクトリーとして使用することができます。これにより、冗長性が大幅に削減されます。それはうまくいってうれしい! – Shadwell