Forgery generiert immer wieder die gleichen Werte

Ich hatte gerade ordentlich mit Forgery zu kämpfen. Ich erzeuge mit Hilfe des Fabrication Gems Objekte für meine Tests und hatte das Problem, dass Forgery immer wieder die selben Werte generierte. Mein Fabricator sieht so aus:

Fabricator(:scope) do
  name Forgery::Basic.text allow_special: true
end

Wenn ich dann folgenden Code ausgeführt habe:

puts Fabricate(:scope).name
puts Fabricate(:scope).name
puts Fabricate(:scope).name

erhielt ich folgende Ausgabe:

6&[M=qOvUD68
6&[M=qOvUD68
6&[M=qOvUD68

Gewünscht waren aber natürlich individuelle Werte, die für den Namen genutzt werden sollten. Auf die Lösung bin ich durch dieses Github-Issue gekommen. Man muss einfach den gewünschten Wert in einen Block packen, dann generiert Forgery immer neue Werte. Ohne Block wird der Wert einmal erzeugt und dann gecacht. Die Lösung sieht somit so aus:

Fabricator(:scope) do
  name { Forgery::Basic.text allow_special: true }
end

Die Ausgabe der drei Fabricates ist dann wie gewünscht:

6&[M=qOvUD68
F%Ni9I5af+NZ
;]+BH5O3cH0=3

Schreibe einen Kommentar