Ruby gem 工厂机器人:

Ruby gem 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 returns 带有品牌字段的散列:

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

我理解 factory 在读取工厂定义时

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

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

The above approach doesn't work, because n get value only one time.

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