在我的应用程序中,我在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})
为什么没有通过考试?
答案 0 :(得分:0)
问题在于调用full_clean
,它实际上没有重新加载任何验证错误 - 而是由full_clean
调用的方法(包括_clean_fields -> UserCreationForm.clean_password2
)引发的任何错误都将被捕获并添加到形式的ErrorDict。
请注意,任何未通过验证的字段都不会显示在form.cleaned_data
中。