Django / FactoryBoy - 无法为抽象模型生成实例

Django / FactoryBoy - unable to generate instance for abstract models

我正在为 Django 应用程序编写测试,目前 运行遇到以下问题:

我有这个(抽象)模型:


class HeroContent(models.Model):
    title = models.CharField(
        max_length=100, blank=True, null=True,
        default=None)
    subtitle = models.CharField(
        max_length=255, blank=True, null=True,
        default=None)

    class Meta:
        abstract = True

我为此创建了以下工厂:


class HeroContentFactory(factory.DjangoModelFactory):

    class Meta:
        model = HeroContent
        abstract = True

    title = factory.Faker('company')
    subtitle = factory.Faker('company')

我参考了documentation如何处理抽象模型,但是当我运行进行以下测试时:

class HeroContentFactoryTest(TestCase):

    def test_init(self):
        hero_content = HeroContentFactory()

出现以下错误:

FactoryError: Cannot generate instances of abstract factory HeroContentFactory; Ensure HeroContentFactory.Meta.model is set and HeroContentFactory.Meta.abstract is either not set or False.

但这似乎直接违背了官方文档中推荐的课程, 其中指出当

If a DjangoModelFactory relates to an abstract model, be sure to declare the DjangoModelFactory as abstract

正在从出厂设置中删除 abstract = True

引发以下错误:

AttributeError: 'NoneType' object has no attribute 'create'

在抽象模型上调用 .create 当然应该失败,但现在我想知道使用工厂测试此类模型的正确方法是什么 - 特别是发现文档中建议的课程不起作用为了我。

有谁知道我做错了什么吗?

您需要从 HeroContentFactory 继承到 HeroContentConcreteFactory,它将绑定到 HeroContent 的子类,这将是一个具体模型。您不能从抽象模型或抽象工厂实例化。