J'ai du code dans une application Flask qui utilise des JSON dans la demande, et je peux obtenir l'objet JSON de la manière suivante:
Request = request.get_json()
Cela fonctionne bien, mais j'essaie de créer des tests unitaires à l'aide du module unittest de Python et j'ai du mal à trouver le moyen d'envoyer un JSON avec la requête.
response=self.app.post('/test_function',
data=json.dumps(dict(foo = 'bar')))
Cela me donne:
>>> request.get_data()
'{"foo": "bar"}'
>>> request.get_json()
None
Flask semble avoir un argument JSON dans lequel vous pouvez définir json = dict (foo = 'bar') dans la demande de publication, mais je ne sais pas comment faire cela avec le module unittest.
Changer le poste en
response=self.app.post('/test_function',
data=json.dumps(dict(foo='bar')),
content_type='application/json')
corrigé.
Merci à user3012759.
UPDATE: Depuis Flask 1.0 publié flask.testing.FlaskClient
méthodes accepte json
argument et Response.get_json
méthode ajoutée, voir exemple .
pour Flask 0.x, vous pouvez utiliser le reçu ci-dessous:
from flask import Flask, Response as BaseResponse, json
from flask.testing import FlaskClient
from werkzeug.utils import cached_property
class Response(BaseResponse):
@cached_property
def json(self):
return json.loads(self.data)
class TestClient(FlaskClient):
def open(self, *args, **kwargs):
if 'json' in kwargs:
kwargs['data'] = json.dumps(kwargs.pop('json'))
kwargs['content_type'] = 'application/json'
return super(TestClient, self).open(*args, **kwargs)
app = Flask(__name__)
app.response_class = Response
app.test_client_class = TestClient
app.testing = True