大多数时候我必须更改/扩展默认表单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)
使用Django的TestCase类中的self.client.post来捕获响应是不够的,绝对不会覆盖/测试自定义保存和清理。
您测试表格的做法是什么?在我看来,我上面所做的是错误的,因为它更多的是一个整合测试,通过视图来获取形式。
答案 0 :(得分:6)
直接在测试中创建表单,然后调用is_valid
method(is_valid
调用clean
);检查它是否正确验证。 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'])])
(上面的代码来自django源代码 - django/contrib/auth/tests/test_forms.py
)。
顺便说一句,assertTemplateUsed
的参数是response, template_name, ...
,而不是template_name, response, ....
。
问题代码中的最后一行应该是:
self.assertTemplateUsed(response, 'example.html')