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 次 |
| 最近记录: |