3
我一直在試圖讓上傳表單上運行的測試。但是,無論何時我運行測試,它都會說該文件的類型是錯誤的。Django TestCase:SimpleUploadedFile顯示錯誤的文件類型
上傳形式的文件保存用文件名隨機生成:
class Video(models.Model):
def get_generated_path(self):
# Generates random path for video file upload
original_file = models.CharField(null=True)
uploaded_file = models.FileField(storage=FileSystemStorage(location=
settings.MEDIA_ROOT), upload_to=get_generated_path)
video_name = models.TextField()
,並形成看起來像:
class VideoForm(forms.Form):
video_file = forms.FileField()
video_name = forms.CharField()
def clean_video_file(forms.Form):
content = self.cleaned_data['video_file']
content_type = content.content_type.split('/')[0]
if content_type in settings.CONTENT_TYPES:
if content._size > settings.MAX_UPLOAD_SIZE:
raise forms.ValidationError(_('Please keep filesize under %s.
Current filesize %s') % (filesizeformat(
settings.MAX_UPLOAD_SIZE), filesizeformat(content._size)))
else:
raise forms.ValidationError(_('File type is not supported,
content type is: %s' % content_type))
return content
其餘大多數的邏輯是在訪問量:
def upload_video(request):
try:
# Check if user is authenticated
if form.is_valid():
video_file = request.FILES['video_file']
video_name = form.cleaned_data['video_name']
save_video = Video.objects.create(
original_file = 'uploaded_videos' + user.username,
video_name = video_name)
return HTTPResponseRedirect('next-page')
except Exception, e:
...
測試寫爲:
def test_video_form(TestCase):
user = #Create a dummy user
test_video = SimpleUploadedFile('test_video.flv', open(
'path/to/test/video', 'rb'))
form = VideoForm(user, {'video_name': test_video},)
self.assertTrue(form.is_valid())
上述測試總是失敗,因爲它說'test_video.flv'的文件類型是純文本/文本文件。我檢查了'test_video.flv'及其正確類型。 如何將這些文件傳遞給上傳表單並進行測試。
您的表單在html中是否具有enctype =「multipart/form-data」? – boltsfrombluesky 2013-04-27 16:35:19
是的,它在html中有enctype。 – n3rV3 2013-04-28 04:26:16