Django Pytest图片上传单元测试提示无效图片如何解决?
问题解决方法
错误原因
你当前的test_image函数生成的不是合法JPEG格式文件,直接调用PIL图像的tobytes()方法得到的是原始RGB像素数据,没有JPEG格式的文件头和编码结构,Django的ImageField在校验上传文件时会识别为非法图片,因此抛出对应报错。
此外原有测试用例的断言逻辑存在类型不匹配问题:photo.category是Category模型实例,form_data['category']是分类的主键数值,直接比对会返回False,需要同步调整。
修改方案
1. 调整测试图片生成函数
from PIL import Image from django.core.files.uploadedfile import SimpleUploadedFile from io import BytesIO def test_image(name='test.jpg', size=(250,250)): img = Image.new('RGB', size) # 将图片按JPEG格式编码写入内存缓冲区 img_buffer = BytesIO() img.save(img_buffer, format='JPEG') img_buffer.seek(0) # 使用编码后的JPEG数据生成上传文件 return SimpleUploadedFile(name, content=img_buffer.read(), content_type='image/jpeg')
2. 调整测试用例断言语句
将test_photo_create_view_form_valid_existing_category方法中的断言语句修改为以下任意一种即可:
# 方案1:比对分类主键 assert photo.category.pk == form_data['category'] # 方案2:直接和生成的category实例比对 assert photo.category == category
内容的提问来源于stack exchange,提问作者Leigh Forrest
相关产品推荐
相关产品推荐

