2012-04-24 14 views
5

मैं एक स्वयं लिखित फॉर्मफिल्ड ऑडियोफाइलफॉर्मफ़िल्ल्ड का परीक्षण करने की कोशिश कर रहा हूं, जो जांचता है कि फ़ाइल संग्रहीत करने से पहले एक ऑडियोफ़ाइल है या नहीं। इसके लिए मैंने to_python विधि को अधिलेखित किया है। इस फॉर्मफिल्ड का परीक्षण करने की कोशिश कर मैं कुछ कठिनाइयों में भाग गया।किसी फॉर्म का परीक्षण करने के लिए दायरता को अनुकरण करने का सही तरीका क्या है?

यह मेरा testcase अब तक है: 'फ़ाइल' वस्तु कोई विशेषता जब मैं एक सही डिबग ट्रेस डालने 'प्राप्त'

है:

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

class TestAudioFileFormField(TestCase): 
    """ test the formfield to use for AudioFile Uploads """ 

    class TestForm(forms.Form): 
     audiofilefield = AudioFileFormField() 


    def setUp(self): 

     self.AUDIOFILE_TEST_ROOT = os.path.dirname(__file__) + '/data/' 
     self.files = audiofile_files 


    def test_to_python(self): 
     """ assign some files to a form and validate the form """ 

     f = file(self.AUDIOFILE_TEST_ROOT + self.files[0]) 
     file_data = {'audiofilefield':SimpleUploadedFile(self.files[0],f.read())} 
     data = {} 

     form = self.TestForm(data,f) 
     form.is_valid() 

लाइन form.is_valid() एक AttributeError को जन्म देती है form.is_valid() से पहले, इस मैं कि इंटरैक्टिव सत्र में क्या मिलता है:

ipdb> form.is_valid() 
AttributeError: 'file' object has no attribute 'get' 
ipdb> suf = file_data['audiofilefield'] 
ipdb> suf 
<SimpleUploadedFile: invalid_format.mp3 (text/plain)> 
ipdb> dir(suf) 
[lots of info here] 
ipdb> form.is_valid() 
True 

वास्तव में क्या मैं इंटरैक्टिव सत्र में बदल दिया है, ताकि फ़ॉर्म सत्यापन काम कर रहा है? AttributeError से बचने के लिए फ़ाइल को SimpleUploadedFile में पास करने का सही तरीका क्या होगा?

उत्तर

7

ठीक है, एक नया रूप बहुत लायक हो सकता है। यह मेरा नया test_to_python परीक्षण है, इस बार यह काम करता है:

def test_to_python(self): 
    f = file(self.AUDIOFILE_TEST_ROOT + self.files[0]) 
    file_data = {'audiofilefield':SimpleUploadedFile(self.files[0],f.read())} 
    data = {} 
    form = self.TestForm(data,file_data) 
    self.assertTrue(form.is_valid()) 
+2

क्या आपको यह प्रदूषण आपकी 'अपलोड/'निर्देशिका नहीं मिलता है? –

5

वैकल्पिक समाधान (क्योंकि इस प्रश्न के लिए "Django परीक्षण अनुकरण अपलोड" शीर्ष गूगल परिणाम है): Django के builtin परीक्षण ग्राहक पोस्ट डेटा के रूप में फ़ाइल खोलने वस्तुओं को स्वीकार करता है :

# the form 
class TestForm(forms.Form): 
    audiofilefield = AudioFileFormField() 

# the view 
def upload_view(request): 
    form = TestForm(data=request.POST or None, files=request.FILES or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
       return HttpResponse('success') 
     else: 
       return HttpResponse('fail') 

# the test function 
class UploadTest(TestCase): 
    def test_upload(self): 
     c = Client() # django.test.client.Client 
     formdata = {} 
     with open('/my/audiofile.mp3', 'rb') as f: 
      formdata['audiofilefield'] = f 
      response = c.post('/my-test-view/', formdata) 
संबंधित मुद्दे

 संबंधित मुद्दे