2012-12-10 85 views
0

我是使用新的自定義用戶模型在django 1.5b中測試註冊表單的單元。我想測試我的自定義clean_email方法提出了在新用戶試圖用已有的電子郵件註冊一個ValidationError,這裏是乾淨的方法,我寫道:`Django:單元測試表單和KeyError

def clean_email(self): 

    email = self.cleaned_data["email"] 
    try: 
     user = MyUser.objects.get(email=email) 
     raise forms.ValidationError("This email address already exists.") 
    except MyUser.DoesNotExist: 
     return email 

測試代碼:

def test_clean_email(self): 
    data = {'email': '[email protected]'} 
    form = MyForm(data) 
    actual = form.errors['email'] 
    expected = [u'This email address already exists.'] 
    self.assertEqual(actual, expected) 

我得到這個運行測試後:

actual = form.errors['email'] 
KeyError: 'email' 
+0

你的MyForm有一個名爲email的字段嗎? – iMom0

回答

0

你必須調用form.is_valid()去填充form.errors

+0

@ iMom0 MyForm類實際上有一個電子郵件字段,在這裏它是:'email = forms.EmailField( label ='Email', initial ='Enter email address。', )'@Daniel Roseman from django doc,Three清潔方法的類型在表格處理過程中運行。這些通常在您調用表單上的is_valid()方法時執行。還有其他的東西可以觸發清理和驗證(直接訪問錯誤屬性或調用full_clean()),但通常不需要它們。 – Twissell

+0

呃,那很好。你仍然需要先調用'form.is_valid()'。 –