2010-07-14 11 views
5

'u kullanarak benzersiz özniteliklere sahip örnekler oluşturma Her biri benzersiz olacak şekilde guid alanında bir kısıtlama ve bir doğrulama var. Sorun şu ki, aşağıda sahip olduğum fabrika tanımı ile, ek örnekler doğrulanamadığı için yalnızca bir kullanıcı örneği oluşturabilirim.Factory Girl

Bunu nasıl doğru yapabilirim, böylece kılavuz alanı her zaman benzersiz olur? Bir şeyin yineleyici benzeri ancak bir zaman damgası olmasını istemediklerini, ancak,

Factory.define(:user) do |u| 
    u.sequence(:guid) { |n| "key_#{n}" } 
end 

Ben varsayalım: Genelde

Factory.define(:user) do |u| 
    u.guid UUIDTools::UUID.timestamp_create.to_s 
end 

cevap

10

, Fabrika Kız dizileriyle sorunu giderir. UUIDTools :: UUID.timestamp_create bir (umutla uygun biçimlendirilmiş) zaman damgası oluşturur varsayarak

Factory.define(:user) do |u| 
    u.guid { Time.now.to_s } 
end 

ya: Bu (zamanında değerlendirmek) yavaş özelliklerini kullanılarak yapılabilir

Factory.define(:user) do |u| 
    u.guid { UUIDTools::UUID.timestamp_create.to_s } 
end 
+2

+1 OP'nin problemi olmasının sebebi, guid yaratım kodunun Fabrika tanım süresinde değerlendirilmesinin, dolayısıyla fabrikanın her bir çağrısı için değerin sabit kalmasıdır. Üç olası çözümünüzün üçüncüsü, fabrikanın her bir çağrısında yeni bir GUID üretecek ve bu da OP'nin neye benzediğini kesinlikle belirleyecek. –

İlgili konular