3

FactoryGirl と RSpec を使用してコードをテストしています。私のORMのモンゴイド。私が直面している問題は、埋め込みドキュメントを作成するには、親ドキュメントも作成する必要があるということです。次に例を示します。

# app/models/recipe.rb
class Recipe
  include Mongoid::Document

  field :title

  embeds_many :ingredients
end

# app/models/ingredient.rb
class Ingredient
  include Mongoid::Document

  field :name

  embedded_in :recipe
end

次に、これらの両方のファクトリを作成します。

# spec/factories/recipes.rb
FactoryGirl.define do
  factory :recipe do |f|
    f.title "Grape Salad"
    f.association :ingredient
  end
end

# spec/factories/ingredients.rb
FactoryGirl.define do
  factory :ingredient do |f|
    f.name "Grapes"
  end
end

私が今抱えている問題は、FactoryGirl.create(:ingredient) を呼び出せないことです。その理由Ingredientは埋め込まれており、私のIngredient工場はレシピへの関連付けを宣言しません。レシピへの関連付けを宣言すると、レシピが材料に関連付けられ、材料がレシピに関連付けられるため、無限ループが発生します。Ingredient クラスを正しく単体テストできないため、これは非常に面倒です。どうすればこの問題を解決できますか?

4

1 に答える 1

4

埋め込まれたIngredientクラスを単に単体テストすることが目標である場合は、データベースへの「作成」を完全に回避し、オブジェクトをインスタンス化するのが最善です...

FactoryGirl.build(:ingredient)  

そうすれば、オブジェクトを実際にMongoDBに永続化することを回避できます。そうしないと、Mongoid / MongoDBの観点から、埋め込みドキュメントは親なしではデータベースに存在できないため、オブジェクトをDBに永続化する必要がある場合は、親を介して行う必要があります。

于 2013-03-20T20:28:28.293 に答える