gpt4 book ai didi

ruby-on-rails - 如何使用 FactoryGirl 创建嵌入式文档?

转载 作者:行者123 更新时间:2023-12-04 05:38:04 26 4
gpt4 key购买 nike

我正在使用 FactoryGirl 和 RSpec 来测试我的代码。我的 ORM 中的 Mongoid。我遇到的问题是,为了创建嵌入文档,您还必须创建父文档。这是一个例子:

# 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 工厂从不声明与 Recipe 的关联。如果我确实声明了与配方的关联,那么我会得到一个无限循环,因为配方与成分相关联,而成分与配方相关联。这很烦人,因为我无法正确地对我的 Ingredient 类进行单元测试。我该如何解决这个问题?

最佳答案

如果您的目标只是对嵌入式 Ingredient 类进行单元测试,那么最好避免完全“创建”数据库,而只是实例化对象 ala...

FactoryGirl.build(:ingredient)  

这将避免将对象实际持久化到 MongoDB 中。否则,从 Mongoid/MongoDB 的角度来看,没有父级,嵌入式文档不能存在于数据库中,因此如果您必须将对象持久化到数据库中,则必须通过父级来完成。

关于ruby-on-rails - 如何使用 FactoryGirl 创建嵌入式文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14448881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com