测试django表单引发了ValidationError

amu*_*sch 6 python django unit-testing

我正在测试我的表单会引发验证错误.

我的测试如下所示:

    def test_register_password_strength(self):
        form_params = {'first_name': 'John',
                       'last_name': 'Doe',
                       'email': 'john@doe.com',
                       '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)
Run Code Online (Sandbox Code Playgroud)

表格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')
Run Code Online (Sandbox Code Playgroud)

self.assertFalse(form.is_valid())断言正确为false,但是当我尝试调用时form.clean_password(),我收到以下错误:TypeError: object of type 'NoneType' has no len().

self.cleaned_data没有命名元素password之后form.is_valid()被调用.

有没有其他方法来测试ValidationErrors除了调用之外的其他方法is_valid()

Cha*_*thk 6

而不是使用:

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

考虑使用 Form.has_error('password', code='pw_too_short')

更多信息:https://docs.djangoproject.com/en/1.8/ref/forms/api/#django.forms.Form.has_error