如何对返回JSON对象的方法进行单元测试?

use*_*592 3 python json unit-testing flask

我有两个Python脚本:让我们称之为program.py和program_utils.py.

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)
Run Code Online (Sandbox Code Playgroud)

program_utils.py中的get_json_object()如下所示:

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

我的问题是如何在program_utils中为get_json_object创建单元测试,以确保它以正确的格式返回对象?我已经尝试编写一个常规单元测试(将方法视为返回一个字符串),但是出现了一个运行时错误,说"在应用程序上下文之外工作".

dav*_*ism 5

您使用测试客户端来测试Flask视图.创建它,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
Run Code Online (Sandbox Code Playgroud)

瓶文档有一整个章节专门介绍这个.该WERKZEUG文档进入更详细.