I'm creating a project with Django that involves user uploading images. To test for an image and how it's stored in Django's default storage, I'm using the combination of SimpleUploadedFile, io.BytesIO(), and the Pillow Image class. When I test for the successful creation of a Django model instance (Photo) a UnicodeDecodeError is raised.
I've gone over the Python docs and read content on other forums that dealt with similar problems creating a mock image for testing purposes. I have had zero luck resolving this. What can be done to resolve this so that open() reads the BytesIO file successfully?
I've gone over the Python docs and read content on other forums that dealt with similar problems creating a mock image for testing purposes. I have had zero luck resolving this. What can be done to resolve this so that open() reads the BytesIO file successfully?
Error:ERROR: setUpClass (photos.tests.test_models.TestPhotoModel)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\..\..\..\..\..\venv\lib\site-packages\django\test\testcases.py", line 1137, in setUpClass
cls.setUpTestData()
File "C:\..\..\..\..\..\photos\tests\test_models.py", line 23, in setUpTestData
content=open(file.read(), 'rb')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start bytefrom io import BytesIO
from unittest.mock import Mock, patch
from django.test import TestCase
from django.db.models import ImageField
from django.core.files.uploadedfile import SimpleUploadedFile
from PIL import Image
from ..models import Photo
class TestPhotoModel(TestCase):
@classmethod
def setUpTestData(cls):
file = BytesIO()
image = Image.new("RGB", (50, 50), 'red')
image.save(file, "png")
file.seek(0)
data = {
'title': "Title",
'image': SimpleUploadedFile(
'test_image.png',
content=open(file.read(), 'rb')
)
}
cls.new_photo = Photo.objects.create(**data)
def test_photo_instance_created(self):
total_photos = Photo.objects.count()
self.assertEqual(total_photos, 1)
