如何获取为特定模型类定义的所有factory_girl工厂?

时间:2016-01-10 05:04:42

标签: ruby-on-rails ruby ruby-on-rails-4 factory-bot rspec3

我在<Rails-root>/spec/factories/models.rb中定义了一个工厂:

FactoryGirl.define do
  factory :model do
    id 1
    association :organization, factory: :aureso
    name "Default Model"

    factory :serie_1 do
      id 2
      name 'serie_1'
    end

    factory :serie_2 do
      id 3
      name 'serie_2'
    end

    factory :serie_3 do
      id 4
      name 'serie_3'
    end
  end
end

我希望获得为班级Model定义的所有工厂。

我可以使用FactoryGirl.factories获取所有类的工厂定义,是的,我可以使用map / reduce实现上述目标。但我想知道是否有任何辅助方法来获取模型类的所有定义。

1 个答案:

答案 0 :(得分:4)

the source可以看出,当前版本的factory_girl(4.5.0)中的FactoryGirl类没有方便的方法来列出创建给定类实例的工厂。

这不是一个非常令人兴奋的答案,所以让我们以不方便的方式做到这一点! FactoryGirl.factories返回一个FactoryGirl::Registry,它再次没有方便的方式列出工厂,但确实有一个@items哈希,其键是工厂名称,其值是{{的实例3}}。给定Factory构建实例的类由Factory#build_class返回。因此,我们可以列出使用

构建给定类实例的工厂
FactoryGirl.
  factories.
  instance_variable_get('@items').
  select { |name, factory| factory.build_class == SomeClass }.
  keys

由于这依赖于内部,所以它肯定会在未来中断。