如何在pytest-django中测试model.Serializer?

问题描述

我正在尝试学习如何在DRF项目中使用测试,但是我不能出去测试串行器,不能添加图像和主键,请举例说明如何操作>

我的测试:

def get_image(name='test.png',ext='png',size=(50,50),color=(256,0)):
    file_obj = BytesIO()
    image = Image.new("RGBA",size=size,color=color)
    image.save(file_obj,ext)
    file_obj.seek(0)
    return File(file_obj,name=name)

@pytest.mark.django_db
def test_valid_poster_serializer():
    valid_serializer_data = {
    "title": "new poster","description": "poster description","image": get_image(),"address": "foo","phones": "89991234586","price": 100,"site": "https://foo-bar.com/","latitude": 123456.0,"longitude": 123456.0,"categories": {
        "title": "new"
        },}
    serializer = PosterSerializer(data=valid_serializer_data)
    assert serializer.is_valid()
    assert serializer.validated_data == valid_serializer_data
    assert serializer.data == valid_serializer_data
    assert serializer.errors == {}

错误文字: 看起来像图像字段什么也不期望,但是在模型中该字段是必需的

E         Common items:
E         {'address': 'foo',E          'categories': OrderedDict([('title','new')]),E          'description': 'poster description',E          'latitude': 123456.0,E          'longitude': 123456.0,E          'phones': '89991234586',E          'price': 100,E          'site': 'https://foo-bar.com/',E          'title': 'new poster'}
E         Differing items:
E         {'image': None} != {'image': <File: test.png>}
E         Full diff:
E           {
E            'address': 'foo',E         -  'categories': {'title': 'new'},E         +  'categories': OrderedDict([('title',E            'description': 'poster description',E         -  'image': <File: test.png>,E         +  'image': None,E            'latitude': 123456.0,E            'longitude': 123456.0,E            'phones': '89991234586',E            'price': 100,E            'site': 'https://foo-bar.com/',E            'title': 'new poster',E           }
tests/tests_poster/test_serializers.py:50: AssertionError

序列化器:

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Categories
        fields = "__all__"


class PosterSerializer(serializers.ModelSerializer):
    categories = CategorySerializer()

    class Meta:
        model = Poster
        fields = ["id","title","image","price","site","description","address","phones","latitude","longitude","categories"]
              

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)