2013-10-02 18 views
6

Có thể cho FactoryGirl xác định một số ngẫu nhiên nói từ 0-10 không?Cách lấy số ngẫu nhiên trong FactoryGirl?

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

Tôi thực sự muốn số thứ tự được tạo là giá trị ngẫu nhiên từ 0-10.

Tôi muốn tạo xếp hạng với các số khác nhau, nhưng không muốn xác định rõ ràng chúng trong rspec. Điều này sẽ được sử dụng để hiển thị số liệu thống kê trung bình và các thống kê khác từ các số xếp hạng. Ví dụ: Số lượng 10, Số lượng 0, trung bình, v.v.

Trả lời

4

Điều gì đó giống như vậy?

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

Tác phẩm này, tôi không biết lệnh tạo. Nhìn nó, bạn có thể thả phần FactoryGirl và chỉ có 'id {generate (: random_ranking)}' – ChrisBarthol

12

Tính đến phiên bản 4.4, các công trình sau đây đối với tôi ...

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

Và đối với việc sử dụng hơi khác nhau ngẫu nhiên:

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

Tạo vài trường hợp, bạn có thể thấy ngẫu nhiên tên và sự ngẫu nhiên của giá:

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

Giải pháp tốt, tuy nhiên tôi khuyên bạn nên sử dụng phương thức mẫu trong lớp Array. tên {["Miễn phí", "Chuẩn", "Doanh nghiệp"]. Mẫu} – Richard