4

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

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

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

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

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

4

2 回答 2

4

您可以使用assertFormError().

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

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

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

self.assertFormError(response, 'form', None, 'Some error')

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

self.assertFormError(response, 'form', 'field_name', 'Some error')

您还可以传入一组错误以进行测试。

errors = ['some error 1', 'some error 2']
self.assertFormError(response, 'form', 'field_name', errors)
于 2015-12-04T09:14:22.587 回答
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

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

于 2012-06-12T06:04:10.573 回答