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

jsonifyapplication/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-libraryがあります。

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'を使います。バイトとUnicodeを正しく処理するので、 'json'ではなく、' flask.json'を使用してください。手動で文字列を調べないでください。これは* Flask *応答データの取得方法を示していません。 – davidism

関連する問題