python - 为模型测试伪造语言环境字段

标签 python django testing faker

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

from django.conf.global_settings import LANGUAGES

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

factories.py 中,我想伪造 code 字段。我试图从 LANGUAGES 中随机获取语言环境代码,但它失败了。它没有创建一个 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

最佳答案

你可以尝试使用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

关于python - 为模型测试伪造语言环境字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55863073/

相关文章:

php - 在 PHPUnit 测试执行期间隐藏输出

python - 我该如何解决这个错误?名称错误 : name ‘model’ is not defined

python - Pygame - 如何允许我的用户更改他们的输入键? (自定义按键绑定(bind))

python数据帧写入R数据格式

python - Django-nose 奇怪的输出

javascript - Jquery Graph 显示引擎状态

python - 使用 request.user 的 Django 测试功能

testing - 实时嵌入式系统模块测试

python - 使用列表中的项目更改嵌套字典中的值?

python - IntegrityError at/***/(1048, "Column ' ** *' cannot be null") 在 python django