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
的子类,这将是一个具体模型。您不能从抽象模型或抽象工厂实例化。
我正在为 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
的子类,这将是一个具体模型。您不能从抽象模型或抽象工厂实例化。