Ich versuche, einige gefälschte Daten mit dem Edelstein Faker in eine Fabrik zu füllen:
Factory.define :user do |user|
user.first_name Faker::Name::first_name
user.last_name Faker::Name::last_name
user.sequence(:email) {|n| "user#{n}@blow.com" }
end
Obwohl ich davon ausgehe, dass dies Benutzer mit unterschiedlichen Vor- und Nachnamen hervorbringt, ist jeder gleich:
>> Factory(:user)
=> #<User id: 16, email: "[email protected]", created_at: "2011-03-18 18:29:33",
updated_at: "2011-03-18 18:29:33", first_name: "Bailey", last_name: "Durgan">
>> Factory(:user)
=> #<User id: 17, email: "[email protected]", created_at: "2011-03-18 18:29:39",
updated_at: "2011-03-18 18:29:39", first_name: "Bailey", last_name: "Durgan">
Wie kann ich das Faker-Juwel dazu bringen, neue Namen für jeden Benutzer zu generieren und nicht nur die ursprünglichen wiederzuverwenden?
ruby-on-rails
factory-bot
Peter Nixey
quelle
quelle
user.sequence(:first_name} {|n| Faker::Name::first_name}
? FactoryGirl wertet wahrscheinlich nur Ihren Faker-Aufruf aus, wenn es Ihre "Fixtures" lädt. Die Verwendung dersequence param,&block
Methode sollte dies verhindern.Antworten:
Versuchen Sie, die Fälscher in Klammern zu setzen. siehe diesen Link
quelle
Beachten Sie, dass Faker aufgrund der begrenzten Menge an verfügbaren gefälschten Daten möglicherweise immer noch doppelte Daten bereitstellt.
Für einfache Testzwecke und zur Überprüfung der Eindeutigkeit habe ich Folgendes verwendet:
quelle
Um die richtige Antwort zu erhalten, wird sie hier aus dem Blog übersetzt. Ich nehme die Antwort nicht zur Kenntnis.
Um zu erklären, warum, produziert das erste Beispiel die gleichen Namen. Es wird nur einmal ausgewertet. Das zweite Beispiel wird jedes Mal ausgewertet, wenn die Fabrik verwendet wird.
Dies ist auf die
{}
träge Bewertung zurückzuführen. Im Wesentlichen stellen sie ein proc / lambda mit dem Faker-Aufruf als Rückgabewert bereit.quelle
Eine (weniger effiziente) Alternative zur Verwendung von Sequenzen, wenn Sie eine Eindeutigkeitsüberprüfung für ein Attribut haben, besteht darin, zu überprüfen, ob ein vorgeschlagener Wert bereits vorhanden ist, und neue zu versuchen, bis er eindeutig ist:
quelle