私は自分で書き込んだFormField AudioFileFormFieldをテストしようとしています。FormField AudioFileFormFieldは、ファイルが保存される前にオーディオファイルかどうかをチェックします。そのために、私はto_pythonメソッドを上書きしました。このFormFieldをテストしようとするといくつかの問題が発生しました。フォームをテストするためにfiledataをシミュレートする正しい方法は何ですか?
これは、これまでのところ、私の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に渡す正しい方法は何でしょうか?
これはあなたの 'upload /'ディレクトリを汚染していませんか? –