2017-02-23 69 views
2

如何测试生成的Flask视图响应为JSON?测试Flask响应是否为JSON

from flask import jsonify 

@app.route('/') 
def index(): 
    return jsonify(message='hello world') 

c = app.app.test_client() 
assert c.get('/').status_code == 200 
# assert is json 

回答

4

jsonify设置内容类型application/json 。此外,还可以尝试解析响应数据作为JSON。如果无法解析,您的测试将失败。

from flask import json 
assert response.content_type == 'application/json' 
data = json.loads(response.get_data()) 
assert data['message'] == 'hello world' 

通常情况下,这种测试对自己没有意义。你知道这是JS ON自从jsonify返回时没有错误,并且jsonify已经由Flask测试。如果它不是有效的JSON,则序列化数据时会收到错误。

+0

这会在Python 3中引发编码错误。使用'response.get_data(as_text = True)'来避免这个问题。 –

+1

@MarcoLavagnino如果这是提高编码错误,其他的错误。 'flask.json.loads'可以从字节加载JSON,不需要先将它编码为文本。 – davidism

+0

你说得对,我正在使用'json.loads'并导致错误。我试图帮助别人,但你最终帮助了我!谢谢! –

0

它有一个python库。

import json 
#... 
def checkJson(s): 
    try: 
     json.decode(s) 
     return True 
    except json.JSONDecodeError: 
     return False 

如果你还需要检查它是否是一个有效的字符串,检查边界“S。 你可以在这里阅读帮助的蟒蛇网站https://docs.python.org/3.5/library/json.html

+2

不要使用'decode',使用'loads'。使用'flask.json',而不是'json',因为它正确处理字节和unicode。不要手动检查字符串。这并不显示如何获取* Flask *响应数据。 – davidism