'Testing Django FileResponse
I have a Django view that returns a file. The FileResponse
is built for that purpose. However, I do not understand how to test this.
Right now I use the HttpResponse
and test it like this:
response = client.get(url)
io = io = BytesIO(response.content)
The io
object can now be used for further testing.
However, if I try the following with FileResponse
(which is derived from StreamingHttpResponse
and thus has streaming_content
instead of content
), I get the following exception:
TypeError: a bytes-like object is required, not 'map'
If I cast the map
object to bytes
like this:
response = client.get(url)
io = io = BytesIO(bytes(response.streaming_content))
I get another exception: TypeError: 'bytes' object cannot be interpreted as an integer
How can I get an BytesIO
object from FileResponse.streaming_content
?
Solution 1:[1]
streaming_content is iterable, not bytestring, so you will have to join them.
fileres = bytes("test", 'utf-8')
stream = b''.join(response.streaming_content)
assert stream == fileres
Solution 2:[2]
response.getvalue() is responsible to convert from map to bytes:
bytes_io = BytesIO(response.getvalue())
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | rasca0027 |
Solution 2 | Thiago Falcao |