2013-10-02 14 views
6

Czy FactoryGirl może zdefiniować liczbę losową powiedzmy od 0 do 10?Jak uzyskać liczbę losową w FactoryGirl?

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

Bardzo chciałbym, aby wygenerowany numer rankingu był losową wartością z przedziału 0-10.

Chcę generować oceny z różnymi numerami, ale nie chcę jawnie definiować ich w rspec. To byłoby używane do wyświetlania średniej i innych statystyk z numerów ocen. Np: ile lat 10, ile 0, średnia itd.

Odpowiedz

4

Może coś takiego?

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 

Reference here

+1

To działa, nie byłem świadomy polecenia generowania. Przyglądając się, możesz zrzucić partię FactoryGirl i po prostu mieć 'id {generate (: random_ranking)}' – ChrisBarthol

12

Począwszy od wersji 4.4, następujące prace dla mnie ...

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

A dla nieco innego wykorzystania randomizacji:

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

Tworzenie kilka przykładów, można zobaczyć losowość nazwy i losowość ceny:

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') 
    ] 
] 
+1

Dobre rozwiązanie, jednak proponuję zamiast tego użyć przykładowej metody w klasie Array. nazwa {["Bezpłatne", "Standard", "Przedsiębiorstwo"]. – Richard

Powiązane problemy