当模型包含FileField时,如何测试模型形式验证?

时间:2014-04-15 14:07:28

标签: django django-forms

我花了一个时间寻找答案,所以现在我已经弄明白了,我把它放在这里供未来的用户使用。我使用的是Python 2.7和Django 1.5,但这个答案也适用于Python 3+和Django 1.6 +

问题

我有一个包含FileField的模型。我使用ModelForm让用户添加此模型的实例。我希望我的所有应用程序代码都在测试中,包括任何表单。在数据字典中传递文件路径,文件对象或字节字符串不会产生有效的表单。

问题

如何在ModelForm上测试验证,包括FileField

1 个答案:

答案 0 :(得分:0)

您可以从Django's documentation推断答案。诀窍在于,您不会将FileField数据传递到与其余表单数据相同的字典中。相反,您的test_forms.py应该类似于:

from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase


class CorrespondenceFormTest(TestCase):

    def setUp(self):
        ...

    def test_correspondence_form_with_good_data(self):
        data = {
            'direction': 'OU',
            'incoming_mail_type': '',
            'outgoing_mail_type': 'CL',
        }
        file_data = {
            'correspondence_file': SimpleUploadedFile('test.txt', 'Hi!')
        }
        form = CorrespondenceForm(data, file_data)
        self.assertTrue(form.is_valid())

这将通过。您现在可以为您想要失败的事情编写额外的测试,并确保它们因正确的原因而失败。