我为 models.py 中的一些字段定义了模型以及正则表达式验证器。在tests.py中,我编写了测试来验证这些验证器,但它们却通过了。尽管当我尝试通过视图输入错误的值时验证器会发出警报,并且我的 forms.py 中没有该表单的任何“干净”功能
Model:
class Organization(models.Model):
name = models.CharField(
max_length=128,
unique=True,
validators=[
RegexValidator(
r'^[(A-Z)|(a-z)|(\s)]+$',
)
]
)
def __unicode__(self):
return self.name
Tests:
class TestOrganization(TestCase):
def setUp(self):
Organization.objects.create(
name='XYZ123',
location='ABC'
)
def test_insertion(self):
self.assertEqual(1,len(Organization.objects.filter(name='XYZ123')))
该测试实际上根据验证器规则创建了一个组织对象,并且 test_insertion 实际上通过了,但事实不应该是这样,并且应该在 setUp 本身中引发异常。
保存对象不验证。您需要使用手动执行此操作Model.full_clean https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.full_clean method.
from django.core.exceptions import ValidationError
class TestOrganization(TestCase):
def test_validation(self):
org = Organization(name='XYZ123')
with self.assertRaises(ValidationError):
# `full_clean` will raise a ValidationError
# if any fields fail validation
if org.full_clean():
org.save()
self.assertEqual(Organization.objects.filter(name='XYZ123').count(), 0)
See 验证对象 - 模型实例参考 | Django 文档 |姜戈 https://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects
顺便说一句,你的模型没有location
场地。我相应地稍微修改了模型实例创建部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)