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()
?
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
Grazie! Non ho visto questo metodo, funziona perfettamente :-) – amuttsch
Ho postato la risposta per te ;-) – Charlesthk