Ниже приведен фрагмент кода, который описывает, как я отправляю файл в конечную точку в приложении 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. Любое понимание будет высоко ценится.