Sani c модульное тестирование для загрузки файлов - PullRequest
0 голосов
/ 06 января 2020

Ниже приведен фрагмент кода, который описывает, как я отправляю файл в конечную точку в приложении Sani c:

from sanic import Sanic, response

class Server(object):
    def __init__(self, test=False):
        self.app = Sanic()
        self.app.add_route(self.upload, '/upload', methods=['POST'])

    async def upload(self,request):
        # Obtain some data from the request to compare md5
        md5 = request.form.get('md5')

        # Check for file
        if not request.files.get('file'):
            return {"message":"No file selected!","success":False}
        test_file = request.files.get('file')

Как написать модульный тест, который смог передать файл, md5 et c как часть объекта запроса? Вот что я пробовал, но не повезло:

from server import Server
import unittest

class TestUpload(unittest.TestCase):
    def test_upload(self):
        app = Server(test=True).app

        upload_payload = {'upload': open('upload_file.yaml', 'rb'), 'digest': '56d5b275ab20831b22f835cc7bf9905a'}
        headers = {"content-type": "multipart/form-data; boundary=------sanic"}
        files = {'file': ('upload', open('upload_file.yaml', 'rb'), 'text/yaml'), 'Content-Type': 'multipart/form-data', 'Content-Disposition': 'form-data; name="upload"; filename="upload_file.yaml"'}

        request, response = app.test_client.post("/upload", data=upload_payload, headers=headers, files=files)

Как вы можете видеть выше, я пробовал различные методы, чтобы увидеть, будет ли объект запроса, созданный с использованием SanicTestClient, содержать файл как часть request.files и пользовательский request.form.md5, но эти свойства никогда не заполняются по запросу, который создает SanicTestClient. Любое понимание будет высоко ценится.

1 Ответ

0 голосов
/ 07 января 2020

Руководитель проекта здесь. Вы видели, как мы справляемся с этим в Сани c модульных тестах ?

...