我花了一个时间寻找答案,所以现在我已经弄明白了,我把它放在这里供未来的用户使用。我使用的是Python 2.7和Django 1.5,但这个答案也适用于Python 3+和Django 1.6 +
我有一个包含FileField
的模型。我使用ModelForm
让用户添加此模型的实例。我希望我的所有应用程序代码都在测试中,包括任何表单。在数据字典中传递文件路径,文件对象或字节字符串不会产生有效的表单。
如何在ModelForm
上测试验证,包括FileField
?
答案 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())
这将通过。您现在可以为您想要失败的事情编写额外的测试,并确保它们因正确的原因而失败。