假冒模型测试的语言环境字段

问题描述 投票:0回答:1

我只是在这样的模型中有一组语言:

from django.conf.global_settings import LANGUAGES

class AvailableLanguage(models.Model):
    code = models.CharField(choices=LANGUAGES, unique=True)

factories.py,我想假装code字段。我试图从LANGUAGES获取一个区域代码ramdomly但它失败了。它不是创建一个AvailableLanguage实例,而是循环语言并迅速引发问题,因为code设置为unique

所以我想创建一个Provider作为单例,并且由于同样的原因它失败了。它生成所有区域代码,而不是只提供一个!


class Provider(BaseProvider):

    lang_code = NotImplemented

    def __init__(self, generator):
        self.langs = LANGUAGES
        self.generator = generator

    def __getattribute__(self, attrib):
        if attrib == 'lang_code':
            self.lang_code = self.langs.pop()[0]
            return self.lang_code
        else:
            return super().__getattribute__(attrib)


fake.add_provider(Provider)


class AvailableLanguageFactory(DjangoModelFactory):

    code = Faker('lang_code')

    class Meta:
        model = AvailableLanguage
python django testing faker
1个回答
1
投票

你可以尝试使用工厂男孩的Iterator

from django.conf.global_settings import LANGUAGES
import factory


class AvailableLanguageFactory(factory.DjangoModelFactory):
    code = factory.Iterator(LANGUAGES, getter=lambda l: l[0])

    class Meta:
        model = AvailableLanguage
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.