Ich benutze factory_boy um Test Fixtures zu erstellen. Ich habe zwei einfache Fabriken, unterstützt von SQLAlchemy-Modellen (unten vereinfacht).Vermeidung von Duplikaten mit factory_boy factories
Ich möchte AddressFactory.create()
mehrere Male anrufen, und habe es eine Country
erstellen, wenn es nicht bereits vorhanden ist, andernfalls möchte ich es den vorhandenen Datensatz verwenden.
class CountryFactory(factory.Factory):
FACTORY_FOR = Country
cc = "US"
name = "United States"
class AddressFactory(factory.Factory):
FACTORY_FOR = Address
name = "Joe User"
city = "Seven Mile Beach"
country = factory.SubFactory(CountryFactory, cc="KY", name="Cayman Islands")
Meine Frage ist: Wie kann ich diese Fabriken so einrichten, dass factory_boy versucht nicht, ein neues Land jedes Mal, es schafft eine Adresse zu erstellen?
Haben Sie bei [factory.alchemy] einen Blick (https://github.com/rbarrois/factory_boy/blob/master/factory /alchemy.py)? – javex
Nicht sicher, was Sie in diesem Link beziehen; In dieser speziellen Datei ist nichts hilfreich. Ich habe mir die Dokumente für factory_boy und die SQLAlchemy Factory genauer angeschaut, aber ich habe nichts über die Wiederverwendung von Datensätzen gesehen. Suchen Sie im Grunde nach einer Funktionalität vom Typ "Suchen oder Erstellen". –
Nach mehr Forschung dazu ist die kurze Antwort, dass Sie es nicht tun können. Es gibt Unterstützung für [get-or-create mit Django-Modellen] (https://factoryboy.readthedocs.org/en/latest/orms.html#factory.django.DjangoModelFactory.FACTORY_DJANGO_GET_OR_CREATE), aber nicht SQLAlchemy. Ich lasse diese Frage offen, weil ich hoffe, SQLAlchemy Unterstützung für diesen einen von diesen Tagen hinzuzufügen, wenn niemand mich dazu schlägt. –