在评估之前,我怎样才能让所有工厂女工厂都可用?

时间:2014-11-11 04:38:44

标签: ruby-on-rails mongoid factory-bot

设置:

我们将每个工厂保存在一个单独的文件中,并将它们分组到目录中以匹配我们的模型目录结构。我们也使用mongo,我们的许多关系都是embeded_in,而不是典型的has_manybelongs_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来绕过这个问题。我宁愿不做其中任何一个。还有其他解决方案吗?

1 个答案:

答案 0 :(得分:3)

你试过这个吗?

# spec/factories/cat.rb
FactoryGirl.define do
  factory :cat do
    name 'fluffy'
    kittens { [build(:kitten), build(:kitten)] }
  end
end

传递一个块而不是一个值会让它懒惰地进行评估。