Unit-Tests eine Django-Form mit einem FileField
Ich habe eine form, wie:
#forms.py
from django import forms
class MyForm(forms.Form):
title = forms.CharField()
file = forms.FileField()
#tests.py
from django.test import TestCase
from forms import MyForm
class FormTestCase(TestCase)
def test_form(self):
upload_file = open('path/to/file', 'r')
post_dict = {'title': 'Test Title'}
file_dict = {} #??????
form = MyForm(post_dict, file_dict)
self.assertTrue(form.is_valid())
Wie gestalte ich die file_dict übergeben upload_file, um die form?
Du musst angemeldet sein, um einen Kommentar abzugeben.
So weit ich gefunden habe, dieser Weg funktioniert
content_type
Attribut upload_file, zu'image/jpeg'
für eine Bilddatei im jpg-Format zum Beispiel.TypeError: 'str' does not support the buffer interface
.with
Konstrukt zu vermeiden, schließen Sie dieupload_file
ausdrücklich.Werden kann, das ist nicht ganz korrekt, aber ich bin der Erstellung von Bild-Datei im unit-test mit StringIO:
Hier ist eine andere Weise, die nicht erfordern, dass Sie ein Bild.
EDIT: Update für Python 3.
TypeError: string argument expected, got 'bytes'
. Ich löste es mitBytesIO
stattStringIO
, ohneim_io.len
weil einBytesIO
Objekte havent Länge-Attribut.django 1.9
undpython 3.5
.Kombiniert ein paar Ideen und andere Beiträge Stack mit Python 3. Keine externe Datei oder Bibliotheken benötigt.