django测试非字段验证错误

OpC*_*ega 5 django django-testing

我有一个自定义验证函数,但我想使用 Django 提供的单元测试框架来测试它是否抛出了应该抛出的错误。

我可以直接调用该函数并以这种方式测试它,但这并不能确保它在视图中正确使用(即:我想进行集成测试)。

django 测试非特定字段验证错误的方法是什么?

例如,电子邮件字段将测试输入的文本是否是有效的电子邮件地址,但表单上方将显示非字段错误,与任何字段都没有关系。例如,它会说该电子邮件地址已被注册。

在测试应用程序时,如何测试这些非现场验证错误?

Bon*_*ono 6

您可以使用 来测试表单是否有错误assertFormError()

断言表单上的字段在表单上呈现时会引发所提供的错误列表。

请注意,表单名称必须是表单中的名称,而context不是您用于验证的实际表单。

您可以按如下方式使用它non_field_errors(与任何字段无关的一般错误):

self.assertFormError(response, 'form', None, 'Some error')
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式测试特定字段错误:

self.assertFormError(response, 'form', 'field_name', 'Some error')
Run Code Online (Sandbox Code Playgroud)

您还可以传递一个错误元组来进行测试。

errors = ['some error 1', 'some error 2']
self.assertFormError(response, 'form', 'field_name', errors)
Run Code Online (Sandbox Code Playgroud)


Viv*_*k S 0

编写一个验证字段的自定义函数并调用它而不是 form.is_valid()。

Django 文档对此提供了详细的描述。检查下面的链接。

https://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field-default-cleaning

例如:从 django 导入表单

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    email = forms.EmailField(required=False)
    message = forms.CharField(widget=forms.Textarea)

def clean_message(self):
    message = self.cleaned_data['message']
    num_words = len(message.split())
    if num_words < 4:
        raise forms.ValidationError("Not enough words!")
    return message
Run Code Online (Sandbox Code Playgroud)

Herr clean_message 将是我的自定义验证方法