红宝石宝石工厂机器人:

时间:2018-10-05 19:25:32

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

我的目标是创建具有几个具有相同值的字段的工厂, 例如,我希望该名称和full_name相等。

FactoryBot.define do
  factory :brand do
    n = Faker::Company.name
    name      { n }
    full_name { n }
  end
end

以上方法无效,因为 n 仅获得一次价值。

那么,如何评估一些块以与一些动态字段共享其数据?


另一种情况:我有带有品牌的YML文件,并且方法 get_random_brand 会返回带有品牌字段的哈希:

FactoryBot.define do
  factory :brand do
    b = get_random_brand
    name      { b['name'] }
    full_name { b['full_nam'] }
  end
end

我了解读取工厂定义后工厂会这样做

每个创建的工厂如何仅评估 get_random_brand

1 个答案:

答案 0 :(得分:2)

Dependent attributes实际上在FactoryBot中非常简单,因为您只需为块中的另一个属性调用方法即可:

FactoryBot.define do
  factory :brand do
    name      { Faker::Company.name }
    full_name { name }
  end
end

例如,您可以这样做:

FactoryBot.define do
  factory :user do
    name  { Faker::Name.name }
    email { name.downcase.tr(' ', '.') + "@example.com" }
  end
end
  

上述方法不起作用,因为n仅一次获得值。

那是因为在读取工厂定义时会评估factory ... do块。并非每次都使用工厂。