use*_*695 4 python regex django validation unit-testing
我在models.py中为一些字段定义了我的模型以及正则表达式验证器.在tests.py中,我已经编写了测试来验证那些验证器,但是它们反对它们.虽然当我试图通过视图输入错误的值时验证器正在提高警报,但我的forms.py中没有任何"干净"功能
模型:
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
Run Code Online (Sandbox Code Playgroud)
测试:
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')))
Run Code Online (Sandbox Code Playgroud)
此测试实际上创建了一个针对验证器规则和test_insertion实际传递的组织对象,但不应该是这种情况,并且应该在setUp本身中引发异常.
保存对象不会验证.您需要使用Model.full_clean方法手动执行此操作.
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)
Run Code Online (Sandbox Code Playgroud)
请参阅验证对象 - 模型实例引用| Django文档| Django的
顺便说一句,你的模型没有location字段.我相应地稍微修改了模型实例创建部分.
| 归档时间: |
|
| 查看次数: |
1501 次 |
| 最近记录: |