2016-09-20 62 views
2

我有想单元测试的一种形式:Django的模拟单元测试形式的FileField

应用程序/ form.py

class MyForm(forms.Form): 
    file = forms.FileField() 

应用程序/ test.py

class MyFormTest(TestCase): 

    def test_my_form(self): 
     file_mock = MagicMock(spec=File) 
     form = MyForm({'file':file_mock}) 
     self.assertTrue(form.is_valid()) 

我该如何使用模拟或其他方法单元测试此表单?如果可能的话,我想用模拟来测试这个表单。我如何修补和模拟测试它?

回答

1

我发现从其他来源这个解决方案:

form = MyForm(files={'file':file_mock}) 

file_dict = {'file': SimpleUploadedFile(upload_file.name, upload_file.read())} 
form = MyForm(files=file_dict) 

这并获得成功。

0
from django.core.files.uploadedfile import SimpleUploadedFile 
... 
def test_form(self): 
     upload_file = open('path/to/file', 'rb') 
     file_dict = {'file': SimpleUploadedFile(upload_file.name, upload_file.read())} 
     form = MyForm(file_dict) 
     self.assertTrue(form.is_valid()) 
+0

这不起作用。这表明断言不真实。 它甚至从文件中读取数据,但表单验证失败 –