FactoryBot获取工厂可用特征

7
有没有FactoryBot方法或者其他方式可以获取工厂可用的特性?
例如:
FactoryBot.define do
  factory :address, class: Address do
    trait :in_california do
      state 'CA'
    end

    trait :in_new_york do
      state 'NY'
    end

    trait :in_florida do
      state 'FL'
    end
end

我希望能够通过程序获取特征,类似于FactoryBot.get_traits(:address),它将返回为该工厂定义的特征数组,在这种情况下,它将是:

["in_california", "in_new_york", "in_florida"]

这是更明确了吗?

我进行了搜索,但没有找到相关内容。我想知道是否有一种方法可以获取给定工厂的特征。我正在使用一个交互式工具(thor gem)允许用户选择要给工厂哪些特征,这就是我提出这个问题的原因。@jvillian - ibaralf
@jvillian,这不是trait的作用。例如,工厂“:user”可以有许多trait来运行一些回调等。例如,“:user_with_payments”可以执行其他操作。attributes_for(:my_factory).keys将仅返回在工厂“:user”中定义的属性哈希表中的键。 - jedi
@jedi - 对不起,我之前在我的工厂中没有使用traits。因此,我走错了完全的方向。我会删除我的答案和评论,因为我没有添加任何有用的内容。 - jvillian
2
@ibaralf 尝试使用 FactoryBot.factory_by_name(:your_factory).defined_traits。还可以尝试使用FactoryBot.factoriesFactoryBot.traits。您还可以查看 FactoryBot.configuration.factories[:your_factory].defined_traits。 - jedi
FactoryBot.configuration.factories[:your_factory].defined_traits。这似乎给了我trait的集合。非常感谢,我在文档中没有找到它,或者非常难搜索到它。 - ibaralf
1个回答

9

我相信您想要的是以下内容:

FactoryBot.factories[:address].defined_traits.map(&:name)
#=> ["in_california", "in_new_york", "in_florida"]

1
没错,谢谢。我编辑了你的答案并添加了.map(&:name)和返回值,以完成你的示例。 - Joshua Pinter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接