测试非字段特定验证错误的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
答案 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将是我的自定义验证方法