如何为FactoryBot配置自定义词汇列表以生成指定名称?
如何在FactoryBot中使用自定义词汇列表生成name字段?
你的原始FactoryBot工厂定义如下:
FactoryBot.define do factory :foo do name { Faker::Lorem.word } end end
当然可以用自定义词汇列表来生成name,这里有几种简单的实现方式:
直接在工厂里定义词汇列表
直接在工厂内创建一个词汇数组,用sample方法随机选取其中一个:
FactoryBot.define do factory :foo do name { ["苹果", "香蕉", "橙子", "葡萄"].sample } end end
抽成常量复用
如果词汇列表较长,或者需要在多个工厂里使用,建议把它抽成一个常量,方便维护和复用:
# 可以放在工厂文件开头或者单独的配置文件里 CUSTOM_FOO_NAMES = ["苹果", "香蕉", "橙子", "葡萄", "西瓜", "草莓"] FactoryBot.define do factory :foo do name { CUSTOM_FOO_NAMES.sample } end end
按顺序循环生成固定值
如果需要每个生成的foo实例name按固定顺序循环(比如测试需要稳定的唯一值),可以用sequence方法:
FactoryBot.define do factory :foo do sequence(:name) { |n| ["苹果", "香蕉", "橙子"][n % 3] } end end
这样生成的第一个fooname是"苹果",第二个是"香蕉",第三个是"橙子",第四个又回到"苹果",以此循环。
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

