2016-06-16 2 views
3

У меня есть два сценария Python: назовем их program.py и program_utils.py.Как выполнить модульный тест метода, который возвращает объект JSON?

program.py выглядит следующим образом:

from flask import Flask, request, jsonify 
import program_utils 

app = Flask(__name__) 
@app.route('/mypage') 
def my_func(): 
    # Do some stuff here and get a URL parameter 
    my_var = request.args.get('my_var') 
    # Get JSON object from another function in program_utils 
    return program_utils.get_json_object(my_var) 

get_json_object() в program_utils.py выглядит следующим образом:

def get_json_object(my_var): 
    # Do some calls to other methods to create the JSON object using my_var 
    return json_object 

Мой вопрос, как я могу создать модульный тест для get_json_object в program_utils чтобы он возвращал объект в правильном формате? Я попытался написать регулярный модульный тест (рассматривая метод, как если бы он вернул строку), но ему была представлена ​​ошибка времени выполнения, говорящая «работа вне контекста приложения».

+0

Вы можете рассматривать это как тест интеграции, а не единичный тест - вызвать конечную точку и убедиться, что вы получили действительное 'application/json'. – jonrsharpe

+1

http://flask.pocoo.org/docs/0.11/testing/ – davidism

ответ

5

Вы используете тестовый клиент для проверки видов фляг. Создайте его с помощью app.test_client(), а затем используйте его для имитации запросов к вашим маршрутам. Ответ имеет только исходные данные, если вы хотите сравнить его как JSON, вам нужно его загрузить.

c = app.test_client() 
rv = c.get('/mypage', query_string={'my_var': 'my_value'}) 
assert json.loads(rv.get_data()) == expected_data 

The Flask docs есть целый раздел, посвященный введению этого. Werkzeug docs подробнее.

Смежные вопросы