2016-10-17 5 views
0

Ich entwickle API mit Django REST Framework. Ich habe ein Django-Modell, das models.ImageField hat und es funktioniert gut. Aber wenn ich zu Unittest will die Schaffung Modellobjekt, erhalte ich Fehler:Bilddatei kann beim Testen von Django nicht hochgeladen werden

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte 

Mein Code:

class PlacesTest(APITestCase): 

    . . . 

    def test_create_place_full(self): 
     . . . 
     image = SimpleUploadedFile(name='test.jpg', 
            content=open('test.png', 'rb').read(), 
            content_type='image/jpeg') 

     request = self.factory.post(reverse('place-list'), 
            {'name': 'test_place_1', 
            'picture': image, 
            }) 

ich versucht habe string mit Pfad zum Bild vorbei, und ich habe versucht, Methoden aus Django testing model with ImageField um Tests zu machen, aber keinen Erfolg.

Welchen Typ sollte ich an das Django REST Framework übergeben, wenn ich image: file object oder string with path hinzufüge?

Wie kann ich meinen Tests echte Dateien hinzufügen?

Antwort

1

Gefunden Lösung für mein Problem, wenn jemand interessiert ist:

alles, was ich brauchte format='multipart' in Anfrage Argumente spezifiziert:

request = self.factory.post(reverse('place-list'), 
           {'name': 'test_place_1', 
           'picture': self.image}, 
           format='multipart') 

in meinem Projekt war:

REST_FRAMEWORK = { 
    ... 
    'TEST_REQUEST_DEFAULT_FORMAT': 'json' 
} 

so kein Bild könnte zur POST-Anfrage hinzugefügt werden.

Verwandte Themen