Я изо всех сил пытаюсь проверить свои формы, которые повышают ошибку проверки.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()
?
Вы должны использовать 'Form.has_error (поле, код = None)' вместо: https://docs.djangoproject.com/en/1.8/ref/forms/api/#django.forms.Form.has_error – Charlesthk
Спасибо! Я не видел этот метод, он отлично работает :-) – amuttsch
Я отправил вам ответ ;-) – Charlesthk