2016-09-20 66 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

這不起作用。這表明斷言不真實。 它甚至從文件中讀取數據,但表單驗證失敗 –