我的目标是创建具有几个具有相同值的字段的工厂, 例如,我希望该名称和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 ?
答案 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
块。并非每次都使用工厂。