Tôi đang sử dụng factory_boy để tạo các đồ đạc thử nghiệm. Tôi có hai nhà máy đơn giản, được hỗ trợ bởi các mô hình SQLAlchemy (được đơn giản hóa bên dưới).Tránh trùng lặp với các nhà máy factory_boy
Tôi muốn có thể gọi AddressFactory.create()
nhiều lần và tạo nó Country
nếu chưa có, nếu không tôi muốn sử dụng lại bản ghi hiện có.
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")
Câu hỏi của tôi là: làm thế nào tôi có thể thiết lập các nhà máy để factory_boy mà không cố gắng để tạo ra một mới Nước mỗi khi nó tạo ra một địa chỉ?
Bạn hãy nhìn vào [factory.alchemy] (https://github.com/rbarrois/factory_boy/blob/master/factory /alchemy.py)? – javex
Không chắc chắn những gì bạn đang đề cập đến trong liên kết đó; không có gì trong tệp cụ thể có vẻ hữu ích. Tôi đã xem xét các tài liệu cho factory_boy và nhà máy SQLAlchemy nói riêng, nhưng tôi đã không thấy bất kỳ điều gì về việc sử dụng lại các bản ghi. Về cơ bản tìm kiếm một chức năng "tìm hoặc tạo". –
Sau khi nghiên cứu thêm về điều này, câu trả lời ngắn gọn là bạn không thể làm điều đó. Có hỗ trợ cho [get-or-tạo với mô hình Django] (https://factoryboy.readthedocs.org/en/latest/orms.html#factory.django.DjangoModelFactory.FACTORY_DJANGO_GET_OR_CREATE), nhưng không phải SQLAlchemy. Tôi để lại câu hỏi này mở vì tôi hy vọng sẽ thêm hỗ trợ SQLAlchemy cho một trong những ngày này nếu không ai đánh tôi với nó. –