django框架中简化测试表单的模块
django-forms-test的Python项目详细描述
Django框架中简化测试表单的模块
安装
您只需使用pip:
pip install django-forms-test
然后将其导入测试脚本,如下所示:
from django_forms_test import field, cleaned, FormTest
用法
您将创建FormTest的子类,它是 django.test.TestCase,这样您就可以按照习惯添加测试。到 属性form分配要测试的窗体的类。 required_fields应该是表单所需的字段列表。
classYourClass(FormTest):form=YourFormrequired_fields=['email','message']
可以使用名称和字段的元组而不是字段的名称 键入。可用的字段类型是URL,TEXT,PASSWORD, USERNAME,EMAIL。字段类型用于附加检查 允许的字段值(例如,表单不应接受无效的URL)。这个 TEXT是默认类型,没有其他验证。
classYourClass(FormTest):form=YourFormrequired_fields=[('email',field.EMAIL),'message']# same as ('message', field.TEXT)
为了测试窗体的清理方法,可以使用decorator cleaned,它接受输入字段值作为参数并传递 它们按你的功能清洗过了。
classYourClass(FormTest):form=YourForm@cleaned(nick=' Bob ')deftest_strip_nick(self,nick):self.assertEqual(nick,'Bob')
示例
您将此编码:
classSaveFormTest(FormTest):form=SaveFormrequired_fields=['title','tags',('url',field.URL)]@cleaned(tags='one, two')deftest_cleaning_tags(self,tags):self.assertIsInstance(tags,list)self.assertEqual(len(tags),2)self.assertEqual(tags[1],'two')@cleaned(description='')deftest_cleaning_description(self,description):self.assertIsNone(description)
而不是这个:
classSaveFormTest(TestCase):data={'title':'some title','url':'http://some.url','tags':'some tags',}deftest_valid_form(self):form=SaveForm(self.data)self.assertTrue(form.is_valid())deftest_invalid_url(self):my_data=copy(self.data)my_data['url']='invalid url'form=SaveForm(my_data)self.assertFalse(form.is_valid())deftest_required_fields(self):forfieldin('title','url','tags'):withself.subTest(field=field):my_data=copy(self.data)my_data[field]=''form=SaveForm(my_data)self.assertFalse(form.is_valid())deftest_cleaning_tags(self):form=SaveForm({'tags':'one, two'})form.is_valid()tags=form.cleaned_data['tags']self.assertIsInstance(tags,list)self.assertEqual(len(tags),2)self.assertEqual(tags[1],'two')deftest_cleaning_description(self):form=SaveForm({'description':''})form.is_valid()description=form.cleaned_data['description']self.assertIsNone(description)
你把这个编码:
classRegisterFormTest(FormTest):form=RegisterFormrequired_fields=[('username',field.USERNAME),('email',field.EMAIL),('password',field.PASSWORD),('confirm_password',field.PASSWORD),]
而不是这个:
classRegisterFormTest(TestCase):data={'username':'some_username','email':'some@email.com','password':'some password','confirm_password':'some password',}deftest_valid_form(self):form=RegisterForm(self.data)self.assertTrue(form.is_valid())deftest_invalid_username(self):my_data=copy(self.data)my_data['email']='invalid email'form=RegisterForm(my_data)self.assertFalse(form.is_valid())deftest_invalid_email(self):my_data=copy(self.data)my_data['email']='invalid email'form=RegisterForm(my_data)self.assertFalse(form.is_valid())deftest_required_fields(self):forfieldin('username','email','password','confirm_password'):withself.subTest(field=field):my_data=copy(self.data)my_data[field]=''form=RegisterForm(my_data)self.assertFalse(form.is_valid())deftest_password_safe_input(self):form=RegisterForm()input_type=form['password'].field.widget.input_typeself.assertEqual(input_type,'password')input_type=form['confirm_password'].field.widget.input_typeself.assertEqual(input_type,'password')
公告
我这么做只是为了我自己,所以有很多事情 它们仍然不见了,在我需要它们之前我可能不会实现它们。 但是,如果您错过了什么,请随时发送拉取请求。