Метод модульного тестирования, использующий flask.request с PyTest - PullRequest
0 голосов
/ 02 ноября 2019

Можно ли написать модульный тест (PyTest), чтобы охватить только метод, который использует flask.request, как в примере ниже?

api = flask.Blueprint('api', __name__)

@api.route('/', methods=['POST'])
def do_stuff():
    a, b, c = get_params()
    return jsonify(a=a, b=b, c=c)

def get_params():
   data = flask.request.get_json()
   a = data('param_a')
   b = data('param_b')
   c = data('param_c')

Или единственный способ проверить get_paramsчерез do_stuff pytestfixture?

Я пытался напрямую вызвать метод get_params, но не могу понять, что / как на самом деле передать некоторые входные данные в качестве запроса:

import example.api

def test_get_params_method(input, expected_output):
    example.api.get_params()
    # assert input == expected_output ?

Обновление :

# app.py
app = flask.Flask(__name__)
app.register_blueprint(api)

1 Ответ

0 голосов
/ 02 ноября 2019

Я не уверен, что вы можете сделать это с Blueprint, но вы можете сделать это с самим приложением и test_request_context () менеджером, который устанавливает flask.request и, таким образом, позволяет имитироватьвходящий запрос:

from app import app
from example import get_params

def test_get_params_method(input, expected_output):
    with app.test_request_context('/'):
        get_params()

Ознакомьтесь с документацией , но для вашего примера вы, вероятно, захотите передать аргумент data в менеджер контекста.

...