Vermeidung von Duplikaten mit Factory_boy-Fabriken

8

Ich verwende factory_boy , um Test-Fixtures zu erstellen. Ich habe zwei einfache Fabriken, unterstützt durch SQLAlchemy-Modelle (unten vereinfacht).

Ich möchte AddressFactory.create() mehrmals aufrufen und ein Country erstellen lassen, wenn es noch nicht existiert. Anderenfalls möchte ich den vorhandenen Datensatz wiederverwenden.

%Vor%

Meine Frage ist: Wie kann ich diese Fabriken einrichten, so dass factory_boy nicht jedes Mal versucht, ein neues Land zu erstellen, wenn es eine Adresse erstellt?

    
Jim Stewart 02.10.2013, 21:26
quelle

3 Antworten

4

Im letzten Factory-Boy == 2.3.1 können Sie FACTORY_DJANGO_GET_OR_CREATE

hinzufügen %Vor%

Angenommen, das Feld cc ist die eindeutige Kennung.

    
Nam Ngo 02.04.2014 06:57
quelle
2

Sie haben zwar Recht, dass es für SQLAlchemy-basierte Factorys keine get_or_create -Funktion gibt. Wenn die Objekte, die Sie als Fremdschlüssel verwenden möchten, bereits vorhanden sind, können Sie sie durchlaufen:

Ссылка

Man könnte also eine Lösung in Ihrer Fabrik zusammenhacken, indem Sie ein Lazy-Attribut verwenden, das zuerst prüft, ob das Objekt in der Datenbank existiert, und wenn ja, verwendet es diese Methode, um sie zu durchlaufen, aber wenn das Objekt nicht existiert , ruft sie SubFactory auf, um das Objekt zuerst zu erstellen.

    
Jeff Widman 07.08.2015 01:48
quelle
0

Eine andere hackige Lösung besteht darin, die Methode create der Factory so zu überschreiben, dass das Objekt durch Abfragen und Zwischenspeichern der Ergebnisse durchsucht wird.

Dieses einfache Beispiel filtert die **kwargs though nicht:

%Vor%     
ezdazuzena 31.03.2017 07:51
quelle

Tags und Links