factory_boy DjangoModelFactory не создает записи модели для тестирования - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь протестировать свое приложение django, используя factory_boy для настройки экземпляров модели.

У меня есть следующие настройки фабрик для определенных моделей Django.

class StudyFactory(DjangoModelFactory):
    class Meta:
        model = Study

    group = SubFactory(GroupFactory)

@create_attrs(values)
class SomeFactory(DjangoModelFactory):
    class Meta:
        model = SomeModel

    study = SubFactory(StudyFactory)
    some_attr = "some attribute"


@create_attrs(values)
class AnotherFactory(DjangoModelFactory):
    class Meta:
        model = AnotherModel

    study = SubFactory(StudyFactory)

Я пытаюсь запуститьтест со следующей настройкой и разбором:

class SomeTests(TestCase):
    fixtures = ["users.json"]

    def setUp(self):
        self.study = StudyFactory()
        self.some = SomeFactory(study=self.study)
        self.another = AnotherFactory(study=self.study)

    def tearDown(self):
        self.study.delete()
        self.some.delete()
        self.another.delete()

Сначала выдается следующая ошибка:

AttributeError: type object 'SomeFactory' has no attribute 'delete'

Итак, я проверяю детали на self.study:

isinstance(self.study, Study)
>>> True
Study.objects.all()
>>> <QuerySet [<Study: 2014-02-14>]>   # queryset contains values
self.study.group.id
>>> 2

Фабрика, кажется, создает надлежащий экземпляр Study для использования в тестах.Но когда я смотрю на детали для self.some:

isinstance(self.some, SomeModel)
>>> False   # not SomeModel
type(self.some)
>>> FactoryMetaClass
Some.objects.all()
>>> <QuerySet []>   # empty queryset
self.some.some_attr
>>> "some attribute"  # the attribute can still be called!
self.some.study.group.id
>>> AttributeError: 'SubFactory' object has no attribute 'id' # fails even though self.study.group.id did not

Поэтому StudyFactory создает пригодный для использования объект Django, в то время как SomeFactory не создает, а создает FactoryMetaClass.

Причина вопросаявляется: Мне нужно иметь возможность выполнять некоторые функции на экземпляре SomeFactory (), и они не работают, если я не могу генерировать наборы запросов из SomeModel после вызова SomeFactory ().

Мне интересно, если это происходит от декоратораЯ использую на SomeFactory, или если это из-за отношения SubFactory между ними, или если есть какой-то другой эффект, я не понимаю.

Спасибо за помощь.

...