【问题标题】:Django form validation - assertFalse()Django 表单验证 - assertFalse()
【发布时间】:2019-02-02 00:32:31
【问题描述】:

我对 Django 测试软件很陌生。目前我正在尝试为与给定表单连接的验证器创建一个测试类(清理输入数据的过程):

forms.py:

class SignupForm(forms.Form):
    email = forms.EmailField(max_length=200)
    first_name = forms.CharField(max_length=200)
    last_name = forms.CharField(max_length=200)
    company_name = forms.CharField(max_length=200)
    password1 = forms.CharField(max_length=200)
    password2 = forms.CharField(max_length=200)

    def clean(self):
        cleaned_data = self.cleaned_data
        cleaned_username_obtained = cleaned_data.get('username')
        if(cleaned_username_obtained != None):
            username_obtained = cleaned_username_obtained.lower()
        else:
            raise ValidationError('Username is empty!')
        cleaned_email_address = cleaned_data.get('email')
        cleaned_password1 = cleaned_data.get('password1')
        cleaned_password2 = cleaned_data.get('password2')
        cleaned_first_name = cleaned_data.get('first_name')
        cleaned_last_name = cleaned_data.get('last_name')
        cleaned_company_name = cleaned_data.get('company_name')
        if username_obtained != None:
            if((User.objects.filter(username=username_obtained)).count() > 0):
                self._errors['username'] = [u'Username is already in use']
            elif((ModelOfAdvertisementClient.objects.filter(email_address=cleaned_email_address)).count() > 0):
                self._errors['email'] = [u'Email is already in use']
            elif(len(cleaned_password1) == 0):
                self._errors['password1'] = [u'Password input box is empty']
            elif(cleaned_password2 != cleaned_password1):
                self._errors['password2'] = [u'Inserted passwords are different!']
        return cleaned_data 

test_forms.py:

class SignupFormTest(TestCase):
    @classmethod

    def test_correct_values(self):
        form = SignupForm({
            'username': 'testUsername',
            'email': 'mark12@gmail.com', 
            'first_name': 'Karl',
            'last_name': 'Smith',
            'company_name': 'HiTech Inc.',
            'password1': 'test123',
            'password2': 'test123'
            }
        )
        print(str(form.is_valid()))
        self.assertFalse(form.is_valid())

不幸的是,每次我启动上面编写的代码时,都会出现以下错误消息:

self.assertFalse(form.is_valid())
TypeError: assertFalse() missing 1 required positional argument: 'expr'

而且由于这个事实,

form.is_valid()

返回“False”,我真的不知道这个断言有什么问题

【问题讨论】:

    标签: django django-forms django-testing django-tests


    【解决方案1】:

    测试方法不应该有@classmethod 装饰器。这些适用于类范围的设置/拆卸代码。在您的情况下,由于 @classmethod 装饰器,您正在默默地调用一个未绑定的 assertFalse() 方法,该方法需要 2 个参数:一个 TestCase 实例和一个布尔表达式。

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 2011-01-19
      • 2021-06-05
      • 2014-12-06
      • 2017-08-24
      • 2020-06-10
      • 2011-01-20
      • 2021-06-19
      相关资源
      最近更新 更多