【问题标题】:Ruby gem Factory Bot:Ruby 宝石工厂机器人:
【发布时间】:2018-10-05 19:25:31
【问题描述】:

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

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

如何评估get_random_brand每个创建的工厂只有一个?

【问题讨论】:

  • 尝试在 FactoryBot 范围之外创建和使用 ruby​​ 变量来解决您的问题。

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


【解决方案1】:

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 块在读取工厂定义时被评估。并非每次都使用工厂。

【讨论】:

  • 好的,请看第二个用例。
  • 我想说第二个用例只是将 FactoryBot 误用作固定装置机制,而事实并非如此。如果可能的话,您只是在螺丝上使用锤子。
猜你喜欢
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多