Я переопределил метод 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(),

Другие вопросы по тегам