gpt4 book ai didi

ruby-on-rails - 工厂女郎 : Build all factories of a class or in a file?

转载 作者:行者123 更新时间:2023-12-04 06:22:31 24 4
gpt4 key购买 nike

如果我有一个充满工厂的文件,如下所示:

FactoryGirl.define do
factory :city do
name "My City"
state "MI"
latitude 50
longitude -80
association :country
end
factory :waukegan_city, class: City do
name "Waukegan"
state "IL"
latitude "42.36"
longitude "-87.81"
association :country
end
factory :amherst_oh, class: City do
name "Amherst"
state "OH"
latitude 41.36170
longitude -82.25380
association :country
end
end

我能做到:

FactoryGirl.create(:city)
FactoryGirl.create(:waukegan_city)
FactoryGirl.create(:amherst_oh)

但是有没有办法一次创建所有这些(即不指定单个工厂但不在每个文件中创建所有工厂)?

最佳答案

要一次为特定类创建所有工厂,您可以使用 build_class 方法来识别那些特定工厂。

每当我不熟悉 Ruby 对象的功能时,我都会查找它的方法并尝试那些听起来能满足我需要的方法。在这种情况下,我是这样想的:

  1. 我在我的规范之一中添加了以下行:

    puts FactoryGirl.factories.first.methods
  2. 我只运行了那个规范并观察了控制台中的输出。显示的前几个方法是:

    name
    definition
    add_callback
    declare_attribute
    to_create
    define_trait
    constructor
    defined_traits
    inherit_traits
    append_traits
    build_class
    run
    human_names
    associations
    names
  3. build_class 似乎会给我工厂所属的类,所以我试了一下,将我在步骤 1 中添加的行替换为:

    puts FactoryGirl.factories.map(&:build_class)

    这确实给了我所有工厂的类名。

  4. 下一步是仅查找属于特定类的工厂,并遍历它们以创建每个工厂:

    city_factories = FactoryGirl.factories.select { |f| f.build_class == City }    
    city_factories.each { |f| FactoryGirl.create(f.name.to_sym) }

关于ruby-on-rails - 工厂女郎 : Build all factories of a class or in a file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637025/

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