Ant*_*nov 7 python django unit-testing django-forms
大多数时候我必须更改/扩展默认表单save/clean方法.但是,我不确定如何测试自定义保存/清除方法.
大部分时间我的测试都是这样的:
response = self.client.post(reverse('example:view_name'), kwargs={'example, self.example'})
self.assertEqual(200, response.status_code)
self.assertTemplateUsed('example.html', response)
Run Code Online (Sandbox Code Playgroud)
使用来自Django的TestCase类的self.client.post来捕获响应是不够的,绝对不会覆盖/测试自定义保存和清理.
你测试表格的做法是什么?在我看来,我上面所做的是错误的,因为它更多的是一个集成测试,通过视图来获取表单.
直接在测试中创建表单,并调用is_valid
方法(clean
由方法调用is_valid
); 检查它是否正确验证.save
方法相同.
例如:
from django.contrib.auth.forms import (UserCreationForm, ...)
...
class UserCreationFormTest(TestCase):
def test_user_already_exists(self):
data = {
'username': 'testclient',
'password1': 'test123',
'password2': 'test123',
}
form = UserCreationForm(data)
self.assertFalse(form.is_valid())
self.assertEqual(
form["username"].errors,
[force_text(User._meta.get_field('username').error_messages['unique'])])
Run Code Online (Sandbox Code Playgroud)
(上面的代码来自django源代码 - django/contrib/auth/tests/test_forms.py
).
BTW,参数assertTemplateUsed
是response, template_name, ...
,不是template_name, response, ....
.
问题代码中的最后一行应该是:
self.assertTemplateUsed(response, 'example.html')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2279 次 |
最近记录: |