2015-05-17 13 views
5

Sto lottando per testare i miei moduli che generano un errore di convalida.Test django forms raised ValidationError

Il mio test è simile al seguente:

def test_register_password_strength(self): 
     form_params = {'first_name': 'John', 
         'last_name': 'Doe', 
         'email': '[email protected]', 
         'password': 'a', 
         'password_confirm': 'a', 
         'g-recaptcha-response': 'PASSED'} 
     form = RegisterForm(form_params) 
     self.assertFalse(form.is_valid()) 

     try: 
      form.clean_password() 
      self.fail('Validation Error should be raised') 
     except ValidationError as e: 
      self.assertEquals('pw_too_short', e.code) 

E la forma solleva la ValidationError nel seguente modo:

password = forms.CharField(label='Password', widget=forms.PasswordInput) 
    widgets = { 
     'password': forms.PasswordInput(), 
    } 

    def clean_password(self): 
     password = self.cleaned_data.get('password') 

     if len(password) < 7: 
      raise ValidationError('Password must be at least 7 characters long.', code='pw_too_short') 

     return self.cleaned_data.get('password') 

self.assertFalse(form.is_valid()) afferma correttamente a false, ma quando provo a chiamare form.clean_password(), Ottengo il seguente errore: TypeError: object of type 'NoneType' has no len().

self.cleaned_data non è stato chiamato alcun elemento denominato password dopo form.is_valid().

C'è un altro modo di testare il ValidationErrors oltre che chiamando is_valid()?

+1

Si dovrebbe usare 'Form.has_error (campo, il codice = None)' invece: https://docs.djangoproject.com/en/1.8/ref/forms/api/#django.forms.Form.has_error – Charlesthk

+0

Grazie! Non ho visto questo metodo, funziona perfettamente :-) – amuttsch

+0

Ho postato la risposta per te ;-) – Charlesthk

risposta