Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get a random number in FactoryGirl?

Is it possible for FactoryGirl to define a random number say from 0-10?

    factory :rating do
       ranking 1 #random number?
       recipe
    end

I'd really like the ranking number generated to be a random value between 0-10.

I want to generate ratings with different numbers, but don't want to explicitly define them in rspec. This would be used to display the average and other stats from the rating numbers. Ex: How many 10's, How many 0's, average etc.

like image 810
ChrisBarthol Avatar asked Oct 02 '13 16:10

ChrisBarthol


1 Answers

As of version 4.4, the following works for me...

factory :rating do
   ranking {rand(1..10)}
   recipe
end

And for a slightly different use of randomization:

FactoryGirl.define do
  factory :plan do
    name {["Free", "Standard", "Enterprise"].sample}
    price {Faker::numerify('$##')}
  end
end

Creating a few instances, you can see the randomization of name, and the randomization of the price:

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')
    ]
]
like image 191
Jon Kern Avatar answered Nov 07 '22 17:11

Jon Kern