Alex_shady
@Alex_shady

Как протестировать model.serialazer ImageField в pytest-django?

test :
def get_image(name='test.png', ext='png', size=(50, 50), color=(256, 0, 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():
    """тест PosterSerializer с верными данными"""
    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', 'new')]),
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
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
Вообще говоря FileField/ImageField в DRF в виде ссылки на скачивание обычно представляются, но у вас вообще None, значит поле в модели не заполнено. Сравнивать с файлом бесполезно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы