Ruby工厂机器人:

e3bfsja2  于 2022-12-26  发布在  Ruby
关注(0)|答案(1)|浏览(188)

我的目标是创建一个工厂,其中包含几个具有相同值的字段,例如,我希望name和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

当阅读工厂定义时,我理解 factory do
如何评估get_random_brand每个创建的工厂是否只有一个?

oyxsuwqo

oyxsuwqo1#

依赖属性在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块是在读取工厂定义时计算的,而不是每次使用工厂时。

相关问题