Как проверить загрузку файла в pytest?
Как сериализовать объект файла при использовании json.dumps ?
Я использую pytest для тестирования загрузки файлов в django и у меня есть эта функция
def test_file_upload(self):
# file_content is a bytest object
request = client.patch(
"/fake-url/",
json.dumps({"file" : file_content}),
content_type="application/json",
)
Я пытался установить file_content
как объект байтов, но получаю эту ошибку TypeError: Object of type bytes is not JSON serializable
Мне нужно отправить весь файл в конечную точку как сериализованный json
Вы можете использовать эту библиотеку-макет для тестирования загрузки файлов;
from mock import MagicMock
from django.core.files import File
mock_image = magicMock(file=File)
mock_image.name="sample.png"
# Another test operations...
def test_file_upload(self):
# file_content is a bytest object
request = client.patch(
"/fake-url/",
{"file" : mock_image},
format="multipart",
)
Подробный другой ответ; как загрузить файл для модульного тестирования в django
Ваша конечная точка API ожидает многочастную форму, содержащую файл. Ниже приведена функция, которую я использую для отправки многочастной формы из локального файла для тестирования. Если у вас уже есть байты файла, пропустите строку open
и просто используйте file_content
в ContentFile
.
def send_multipart_form(self, filename):
with open(filename, "rb") as f:
file_data = ContentFile(f.read(), os.path.basename(filename))
res = self.client.put(
self.url,
data=encode_multipart(boundary=BOUNDARY, data={"file": file_data}),
content_type=MULTIPART_CONTENT,
)
return res