Я переопределил метод Save в модели с помощью force=False, как мне использовать factoryboy, чтобы высмеивать модель Django?
Например, см. Код ниже:
class Thing(Model):
def save(force=False, *args, **kwargs):
if not force:
raise Exception("don't save!")
FactoryBoy вызывает model.get_or_create(), которая вызывает model.save(). Есть ли способ создать экземпляр этой модели в FactoryBoy без изменения методов save или get_or_create?
2 ответа
Если вам нужен только локальный экземпляр модели Django, вам следует использовать стратегию сборки. Кроме того, стратегия создания вызывает _create
метод, который может быть перезаписан для удовлетворения ваших потребностей.
Поведение по умолчанию factory.django.DjangoModelFactory
это позвонить MyModel.objects.create()
,
Если целью является только один вызов в одном тесте, просто используйте MyModelFactory.build()
,
Если цель состоит в том, чтобы никогда не звонить create()
установите следующее в вашей декларации:
class MyModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.MyModel
strategy = factory.BUILD_STRATEGY
Это карты MyModelFactory()
в MyModelFactory.build()
вместо DjangoModelFactory
дефолт, MyModelFactory.create()
,