django - how zu unit-test ein post-request mittels request.DATEIEN
Habe ich die folgende Logik, meiner Ansicht nach:
def view_function(request):
if request.method == 'POST':
uploadform = UploadFileForm(request.POST, request.FILES)
if uploadform.is_valid():
#do stuff
Wo UploadFileForm gleich:
class UploadFileForm(forms.Form):
file = forms.FileField()
Ich bin versucht, zu schreiben unit-tests für diese Ansicht. Suchen in Django-docs, die empfohlene Möglichkeit ist diese:
class test_stuffTest(TestCase):
def setUp(self):
self.client = django.test.client.Client()
...
def test_stuff(self):
myfile = open('....\file.csv','r')
response = self.client.post('/', {'name':'file.csv','attachment':myfile})
#check response
Mein Ziel ist es, uploadform.is_valid() zu True ausgewertet werden, damit ich den code testen können, folgt die form der Validierung. Wenn ich den test oben, uploadform.is_valid() zu False ausgewertet wird. Ist es etwas, was ich bin fehlt? Ist der code in meinem test-hinzufügen der Datei auf Anfrage.DATEIEN, oder ist es etwas anderes?
Wenn Sie nicht sicher sind, was in
hmm ich versucht, aber die DATEIEN argument ist nicht enthalten in der Ausgabe. Gibt es eine Einstellung um es zu aktivieren?
request.FILES
, das Schnellste, was zu tun ist, fügen Sie eine print-Anweisung in Ihrem Blick zu sehen, was Los ist.hmm ich versucht, aber die DATEIEN argument ist nicht enthalten in der Ausgabe. Gibt es eine Einstellung um es zu aktivieren?
InformationsquelleAutor vasek1 | 2012-03-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
In den docs, das file-Feld genannt wird
attachment
, aber in dir, es heißtfile
.Brauchen Sie nicht
name
in Ihrem post-Daten entweder -- , bezieht sich auf ein anderes Feld namensname
ist, nicht der name der Datei, die Sie hochladen.Versuchen Sie Folgendes:
InformationsquelleAutor Alasdair
Den Weg django - testsuite es tut ist:
Diese Weise brauchen Sie nicht zum erstellen einer temp-Datei, und schreiben Sie es, und Sie brauchen nicht zu spotten einer Datei (nicht so einfach, wie es klingt).
Danke, du hast mich gerettet aus Spott eine Datei! Update für Python ist3 django 1.10 musste ich Platz
b
vor Datei-Inhalte, wie diesef = SimpleUploadedFile("file.txt", b"file_content")
weil TypeErrorInformationsquelleAutor radu.ciorba
Vielleicht bin ich etwas fehlt hier, aber es klingt wie ein job für eine gute mock-Bibliothek. Ich persönlich mag Mock. Aber, ich Falle in das Lager, die glaubt, dass Ihre unit-tests sollten frei von allen externen Abhängigkeiten (wie haben eine Datei namens "Datei.csv" an einem bestimmten Speicherort, etc).
Es ist angekündigt worden, dass Mock Hinzugefügt werden, um die Python-Std-Bibliothek, ist es wahrscheinlich eine gute Sache zu lernen. Hier ist ein video von Michael Foord (Autor von Mock) im letzten Jahr PyCon. blip.tv/pycon-us-videos-2009-2010-2011/... und auch ein video von einem Vortrag von diesem Jahr PyCon, dass ich dachte, war wirklich gut. pyvideo.org/video/699/testing-and-django - ich empfehle, Sie beide.
InformationsquelleAutor David S