自定义验证程序无法运行测试

时间:2018-07-18 19:00:44

标签: django unit-testing django-models django-testing

我有两个模型,它们具有一个共同的领域,但背景不同。

models.py:

validators.py

我需要验证此字段,因此我创建了一个文件models.py,该文件在validators=[validar_cep]import re # from django.core.exceptions import ValidationError from django.core.validators import RegexValidator from .utils.regex import Regex # ------- Mensagens ------- CEP_INVALIDO = ( 'CEP inválido. O CEP deve conter uma entrada com 8 digitos numéricos.' ) # ------- Regex ------- CEP = re.compile(r'^[0-9]$') # ------- Validation Functions ------- def validar_cep(valor): validador = RegexValidator( regex=CEP, message=CEP_INVALIDO, code='invalid' ) validador(valor) )中如上所示:

validators.py:

from itertools import cycle

from django.core.exceptions import ValidationError
from django.test import TestCase
from model_mommy import mommy

from saldanprev.core.models import Segurado, SeguroAuto


class TestSeguroAuto(TestCase):
    """
    Teste do modelo SeguroAuto
    """
    def setUp(self):
        self.cep_pernoite = '05271260'
        self.cep_maior_frequencia = '05133001'
        self.quilometragem_media = 'Até 500 km/mês'
        self.seguro_auto = mommy.make(
            SeguroAuto,
            cep_pernoite=self.cep_pernoite,
            cep_maior_frequencia=self.cep_maior_frequencia,
            quilometragem_media=self.quilometragem_media,
        )

    def teste_cep_pernoite_invalido(self):

        """
        Verifica a mensagem de erro do atributo cep_pernoite caso seja
            persistido uma entrada de cep de pernoite inválida.
        """
        mensagem = (
            'CEP inválido. O CEP deve conter uma entrada com 8 digitos '
            'numéricos.'
        )

        with self.assertRaisesMessage(ValidationError, mensagem):
            mommy.make(SeguroAuto, cep_pernoite='010010-01')

        with self.assertRaisesMessage(ValidationError, mensagem):
            mommy.make(SeguroAuto, cep_pernoite='010010001')

        with self.assertRaisesMessage(ValidationError, mensagem):
           mommy.make(SeguroAuto, cep_pernoite='0100100')

最后,我有一个测试文件来测试是否我坚持一个无效值显示正确的消息:

test_seguro_auto.py

self = <SeguroAuto: [010ec070-5b6e-4c3a-8368-8bb674bfada5]>, exclude = ['cep_pernoite'], validate_unique = True

    def full_clean(self, exclude=None, validate_unique=True):
        """
            Call clean_fields(), clean(), and validate_unique() on the model.
            Raise a ValidationError for any errors that occur.
            """
        errors = {}
        if exclude is None:
            exclude = []
        else:
            exclude = list(exclude)

        try:
            self.clean_fields(exclude=exclude)
        except ValidationError as e:
            errors = e.update_error_dict(errors)

        # Form.clean() is run even if other validation fails, so do the
        # same with Model.clean() for consistency.
        try:
            self.clean()
        except ValidationError as e:
            errors = e.update_error_dict(errors)

        # Run unique checks, but only for fields that passed validation.
        if validate_unique:
            for name in errors:
                if name != NON_FIELD_ERRORS and name not in exclude:
                    exclude.append(name)
            try:
                self.validate_unique(exclude=exclude)
            except ValidationError as e:
                errors = e.update_error_dict(errors)

        if errors:
>           raise ValidationError(errors)
E           django.core.exceptions.ValidationError: {'cep_pernoite': ['CEP inválido. O CEP deve conter uma entrada com 8 digitos numéricos.']}

/usr/local/lib/python3.6/site-packages/django/db/models/base.py:1166: ValidationError 

如果我仅运行此测试,则测试通过。但是,如果我运行所有测试,则所有测试都将失败,并显示以下消息:

validate_unique()

我试图搜索正在发生的事情,但没有找到任何可以帮助我解决问题的好信息。我需要验证此字段,但无法使用自定义验证器。

也许应该与function getLastRowNumber(sheetName){ // sheetName: string; returns intege (the last row number based on column A) var sheet = getSheet(sheetName); var column = sheet.getRange('A1:A'); // THIS IS THE PROBLEM var values = column.getValues(); // get all data in one call // DEBUG Logger.log(values[1001][0]) var ct = 0; while (values[ct][0] != "") { ct++; } return (ct); } 有关,但是我不知道为什么。这只是预感!

可能是什么?还有另一种有效的方法吗?

PS:在models.py中,我省略了其他模型,因为我认为它们与该问题无关。

0 个答案:

没有答案