Używam factory_boy do tworzenia urządzeń testowych. Mam dwie proste fabryki, wspierane przez modele SQLAlchemy (uproszczone poniżej).Unikanie duplikatów w fabrykach factory_boy
Chciałbym móc wielokrotnie wywoływać numer AddressFactory.create()
i utworzyć go jako Country
, jeśli jeszcze nie istnieje, w przeciwnym razie chcę, aby ponownie wykorzystał istniejący rekord.
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")
Moje pytanie brzmi: w jaki sposób można skonfigurować tak, że te fabryki factory_boy nie stara się tworzyć nowego kraju za każdym razem tworzy adres?
Czy przyjrzeć [factory.alchemy] (https://github.com/rbarrois/factory_boy/blob/master/factory /alchemy.py)? – javex
Nie wiesz, do czego masz na myśli ten link; w tym konkretnym pliku nie ma nic, co wydaje się pomocne. Przyjrzałem się dokumentom dla factory_boy i fabryki SQLAlchemy w szczególności, ale nie widziałem nic o ponownym użyciu rekordów. Zasadniczo poszukuje funkcji typu "znajdź lub utwórz". –
Po dalszych badaniach, krótka odpowiedź brzmi, że nie możesz tego zrobić. Istnieje wsparcie dla [get-or-create z modelami Django] (https://factoryboy.readthedocs.org/en/latest/orms.html#factory.django.DjangoModelFactory.FACTORY_DJANGO_GET_OR_CREATE), ale nie SQLAlchemy. Pozostawiam to pytanie otwarte, ponieważ mam nadzieję na dodanie wsparcia SQLAlchemy na ten jeden z tych dni, jeśli nikt mnie do tego nie pobije. –