Django测试表单ValidationError

时间:2018-05-31 13:57:23

标签: django django-forms django-testing

在我的应用程序中,我在RegisterForm中扩展了UserCreationForm,我试图测试如果password1不等于password2,寄存器形式是否返回ValidationError。在每次测试尝试中,我都收到AssertionError: ValidationError not raised

class RegisterViewTestCase(TestCase):

    def setUp(self):
        self.bad_data = {
            'email': self.email,
            'password1': 'valid_password1',
            'password2': 'valid_password2'
        }

    def test_register_registers_invalid_data(self):
        form = RegisterForm(self.bad_data)
        self.assertFalse(form.is_valid())

        with self.assertRaises(ValidationError):
            form.full_clean()

forms.py

class RegisterForm(UserCreationForm):

    class Meta:
        model = CustomUser
        fields = ['email']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['email'].widget.attrs.update({'autofocus': True})

为什么没有通过考试?

1 个答案:

答案 0 :(得分:0)

问题在于调用full_clean,它实际上没有重新加载任何验证错误 - 而是由full_clean调用的方法(包括_clean_fields -> UserCreationForm.clean_password2)引发的任何错误都将被捕获并添加到形式的ErrorDict。
请注意,任何未通过验证的字段都不会显示在form.cleaned_data中。