2014-09-19 66 views
4

大部分时间我必须改变/扩展默认的表格保存/清理方法。 但是我不确定如何测试自定义的保存/清除方法。如何测试自定义Django表单清理/保存方法?

大多数时候我的测试是这样的:

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

要测试什么?您可以检查输出是否符合您的期望(即:保存正确的数据)。 – danielfranca 2014-09-19 15:28:25

回答

3

直接在测试中创建表格,并致电is_valid methodcleanis_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'])]) 

(以上代码从所述的django源代码附带 - django/contrib/auth/tests/test_forms.py)。


顺便说一句,对于assertTemplateUsed的参数是response, template_name, ...,不template_name, response, ....

在讨论的最后一行代码应该是:

self.assertTemplateUsed(response, 'example.html') 
+0

谢谢!所以唯一的办法是通过is_valid:/ – 2014-09-19 20:03:37

+0

你会想检查任何自定义验证工作,但我不会打扰测试正常验证。如果你有一个自定义的保存方法,你也需要测试:哪一个需要使用'result = form.save()',然后检查保存方法中发生的任何事情。 – 2014-09-20 08:58:07