django测试非现场验证错误

时间:2012-06-12 05:59:05

标签: django django-testing

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

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

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

修改:使问题更加清晰。我有一个自定义验证函数,但我想测试它是否会抛出它应该使用Django提供的unittest框架的错误。

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

感谢。

修改:我找到了解决方案,如测试而非验证字段错误。

用assertFormError完成。将字段名称更改为“无”,并将错误字符串更改为错误字符串列表。

self.assertFormError(response, 'form', 'field name', 'error') # Test single field error
self.assertFormError(response, 'form', None, ['Error #1.', 'Error #2']) # Test general form errors

2 个答案:

答案 0 :(得分:2)

只是为了得到一个正确的答案,即使它已经在问题本身,我也会发布答案。

您可以使用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)

答案 1 :(得分:0)

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

Django docs提供了有关此内容的详细描述。检查以下链接。

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

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