2013-10-02 11 views
6

Kann FactoryGirl eine Zufallszahl zwischen 0 und 10 definieren?Wie bekomme ich eine Zufallszahl in FactoryGirl?

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

Ich würde wirklich gerne die Ranking-Nummer generiert, um einen zufälligen Wert zwischen 0-10 zu sein.

Ich möchte Bewertungen mit unterschiedlichen Nummern generieren, aber nicht explizit in rspec definieren. Dies würde verwendet werden, um den Durchschnitt und andere Statistiken aus den Bewertungszahlen anzuzeigen. Bsp: Wie viele 10er, wie viele 0er, Durchschnitt usw.

Antwort

4

So etwas möglicherweise?

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

Dies funktioniert, ich war nicht bewusst, den Befehl generieren. Wenn Sie nachsehen, können Sie den FactoryGirl-Part löschen und haben einfach 'id {generate (: random_ranking)}} – ChrisBarthol

12

Ab Version 4.4, die folgenden Werke für mich ...

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

Und für eine etwas andere Verwendung der Randomisierung:

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

a Erstellen In einigen Fällen können Sie die Randomisierung des Namens und die Randomisierung des Preises sehen:

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

Gute Lösung, aber ich würde vorschlagen, stattdessen die Beispielmethode in der Array-Klasse zu verwenden. Name {["Free", "Standard", "Enterprise"]. Beispiel} – Richard

Verwandte Themen