FactoryGirlでデータを初期化しようとすると、作成した以前のデータにアクセスできないという問題が発生しています。FactoryGirlがDB内でインスタンスを見つけられない
私は、Product、CartItem、およびOrderItemという3つの異なるモデルがあります。これは基本的なルールです。
- CartItemとOrderItem belongs_to Productが必要です。
- 製品に固有の識別子 'name'があります。
私の工場のファイルが同じように設定されているので:
製品
FactoryGirl.define do
factory :product do
name "A Product"
end
end
CartItem
FactoryGirl.define do
factory :cart_item do
association :product do
Product.find_by(name: "A Product") || FactoryGirl.create(:product)
end
end
end
のOrderItem
FactoryGirl.define do
factory :order_item do
association :product do
Product.find_by(name: "A Product") || FactoryGirl.create(:product)
end
end
end
今、一つの試験中に、私が最初にFactoryGirl.create(:cart_item)
このコールを使用してCartItemを作成するすべてが正常に実行されます。 Productがないので、新しい商品を作成してからCartItemに割り当てます。
次に、私はそれが名前」を使用して新しい製品を作成しようとするとこれは失敗し、エラーValidation failed, Name has already been taken
で失敗し、この呼び出しFactoryGirl.create(:order_item)
私はそれを実行する。この時間を利用してのOrderItemを作成しようCartItemを作成するための呼び出しからすでに作成された「A Product」を選択します。
しかし、これは、Product.find_by("A Product") || FactoryGirl.create(:product)
を使用してOrderItemの製品を設定するので、新しいProductインスタンスを作成しようとすることはありません。
これはなぜ発生しているのですか?
アイブ氏はまた、この 'ない限りProduct.find_by(名称: "製品")をやってみました(:製品)end'と同じ問題が発生FactoryGirl.createはありません –