Тестирование Django FileResponse

#python #django #django-views

#python #django #django-просмотры

Вопрос:

У меня есть представление Django, которое возвращает файл. Создан FileResponse для этой цели. Однако я не понимаю, как это проверить.

Прямо сейчас я использую HttpResponse и тестирую его следующим образом:

 response = client.get(url)
io = io = BytesIO(response.content)
  

Теперь io объект можно использовать для дальнейшего тестирования.

Однако, если я попробую выполнить следующее с FileResponse помощью (который является производным от StreamingHttpResponse и, следовательно, имеет streaming_content вместо content ), я получаю следующее исключение:

TypeError: a bytes-like object is required, not 'map'

Если я приведу map объект к bytes подобному:

 response = client.get(url)
io = io = BytesIO(bytes(response.streaming_content))
  

Я получаю другое исключение: TypeError: 'bytes' object cannot be interpreted as an integer

Как я могу получить BytesIO объект из FileResponse.streaming_content ?

Комментарии:

1. streaming_content() является итератором строк, поэтому вы должны выполнить итерацию по нему. На самом деле вы можете выполнить итерацию по ответу напрямую ( __iter__() определяется как self.streaming_content )

Ответ №1:

streaming_content является итеративным, а не байтовым, поэтому вам придется присоединиться к ним.

 fileres = bytes("test", 'utf-8')
stream = b''.join(response.streaming_content)
assert stream == fileres
  

Ответ №2:

response.getvalue() отвечает за преобразование из map в байты:

 bytes_io = BytesIO(response.getvalue())