2010-07-14 14 views
5

Ich habe eine Einschränkung und eine Validierung auf dem GUID-Feld platziert, so dass jedes einzigartig ist. Das Problem ist, mit der Fabrikdefinition, die ich unten habe, kann ich nur eine Benutzerinstanz erstellen, da zusätzliche Instanzen die Validierung nicht bestehen.Erstellen von Instanzen mit eindeutigen Attributen mit Factory Girl

Wie mache ich das richtig, so dass das GUID-Feld immer eindeutig ist?

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

Antwort

10

Im Allgemeinen Factory Girl geht das Problem mit Sequenzen:

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

Ich gehe aber davon aus, dass Sie nicht wollen, etwas Iterator-like, aber einen Zeitstempel haben. Dies könnte mit faulen Attribute erfolgen (die zur Laufzeit auswerten):

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

Oder unter der Annahme, dass UUIDTools :: UUID.timestamp_create einen erzeugt (hoffentlich passend formatiert) Zeitstempel:

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

+1 Der Der Grund dafür, dass das OP das Problem hat, liegt darin, dass der GUID-Erstellungscode zur Factory-Definitionszeit ausgewertet wird, so dass der Wert für jeden Aufruf der Factory konstant ist. Die dritte Ihrer drei möglichen Lösungen wird bei jedem Aufruf der Fabrik eine neue GUID erzeugen, die mit hoher Wahrscheinlichkeit vom OP gesucht wird. –

Verwandte Themen