设置:
我们将每个工厂保存在一个单独的文件中,并将它们分组到目录中以匹配我们的模型目录结构。我们也使用mongo,我们的许多关系都是embeded_in
,而不是典型的has_many
或belongs_to
。
问题:
当工厂需要引用另一个稍后按字母顺序排列的工厂时,工厂女孩会抛出Factory not registered
错误。
示例:
# spec/factories/cat.rb
FactoryGirl.define do
factory :cat do
name 'fluffy'
kittens [FactoryGirl.build(:kitten), FactoryGirl.build(:kitten)]
end
end
# spec/factories/kitten.rb
FactoryGirl.define do
factory :kitten do
name 'mittens'
age_in_months 2
end
end
由于在cat
工厂女孩抛出kitten
错误之前加载了Factory not registered
工厂。
问题
如何强制工厂女孩浏览所有文件,只检查文件定义的工厂名称,而不关心它依赖的其他工厂?
是的,我知道我可以将kitten
工厂放在与cat
工厂相同的文件中,我也知道我可以将kitten.rb
重命名为a_kitten.rb
来绕过这个问题。我宁愿不做其中任何一个。还有其他解决方案吗?
答案 0 :(得分:3)
你试过这个吗?
# spec/factories/cat.rb
FactoryGirl.define do
factory :cat do
name 'fluffy'
kittens { [build(:kitten), build(:kitten)] }
end
end
传递一个块而不是一个值会让它懒惰地进行评估。