2015-05-17 2 views
5

Я изо всех сил пытаюсь проверить свои формы, которые повышают ошибку проверки.Test django forms поднял ValidationError

Мой тест выглядит следующим образом:

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) 

И форма поднимает ValidationError следующим образом:

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()) правильно утверждает ложь, но когда я пытаюсь вызвать form.clean_password(), Я получаю следующую ошибку: TypeError: object of type 'NoneType' has no len().

self.cleaned_data не имеет элемента с именем password после того, как был вызван form.is_valid().

Есть ли другой способ тестирования ValidationErrors, кроме звонка is_valid()?

+1

Вы должны использовать 'Form.has_error (поле, код = None)' вместо: https://docs.djangoproject.com/en/1.8/ref/forms/api/#django.forms.Form.has_error – Charlesthk

+0

Спасибо! Я не видел этот метод, он отлично работает :-) – amuttsch

+0

Я отправил вам ответ ;-) – Charlesthk

ответ

Смежные вопросы