Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rspec 如何在FactoryGirl中获得随机数?_Rspec_Factory Bot - Fatal编程技术网

Rspec 如何在FactoryGirl中获得随机数?

Rspec 如何在FactoryGirl中获得随机数?,rspec,factory-bot,Rspec,Factory Bot,FactoryGirl是否可以定义一个随机数,比如0-10 factory :rating do ranking 1 #random number? recipe end 我真的希望生成的排名数字是0-10之间的随机值 我想用不同的数字生成评级,但不想在rspec中明确定义它们。这将用于显示评级数字的平均值和其他统计数据。例:有多少个10,多少个0,平均值等等。可能是这样的吗 FactoryGirl.define do sequence(:ran

FactoryGirl是否可以定义一个随机数,比如0-10

    factory :rating do
       ranking 1 #random number?
       recipe
    end
我真的希望生成的排名数字是0-10之间的随机值


我想用不同的数字生成评级,但不想在rspec中明确定义它们。这将用于显示评级数字的平均值和其他统计数据。例:有多少个10,多少个0,平均值等等。

可能是这样的吗

FactoryGirl.define do
  sequence(:random_ranking) do |n|
    @random_rankings ||= (1..10).to_a.shuffle
    @random_rankings[n]
  end

  factory :user do
    id { FactoryGirl.generate(:random_ranking) }
  end
end

从4.4版开始,以下内容适用于我

factory :rating do
   ranking {rand(1..10)}
   recipe
end
对于随机化的一种稍微不同的用法:

FactoryGirl.define do
  factory :plan do
    name {["Free", "Standard", "Enterprise"].sample}
    price {Faker::numerify('$##')}
  end
end
创建几个实例,您可以看到名称的随机性和价格的随机性:

2.0.0-p247 :010 > 4.times.each {FactoryGirl.create(:plan)}
2.0.0-p247 :011 > ap Plan.to_list
[
    [0] [
        [0] "Free: $48",
        [1] BSON::ObjectId('549f6da466e76c8f5300000e')
    ],
    [1] [
        [0] "Standard: $69",
        [1] BSON::ObjectId('549f6da466e76c8f5300000f')
    ],
    [2] [
        [0] "Enterprise: $52",
        [1] BSON::ObjectId('549f6da466e76c8f53000010')
    ],
    [3] [
        [0] "Free: $84",
        [1] BSON::ObjectId('549f6da466e76c8f53000011')
    ]
]

这是可行的,我不知道generate命令。查找它,您可以删除FactoryGirl部分,只需使用
id{generate(:random_ranking)}
很好的解决方案,但是我建议在Array类中使用sample方法。名称{[“免费”、“标准”、“企业”].sample}