2014-09-19 98 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