2017-02-23 75 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