flaskr app python json flask python-unittest

python - app - Cómo enviar solicitudes con JSON en pruebas unitarias



python flask testing (2)

Tengo código dentro de una aplicación Flask que usa JSON en la solicitud, y puedo obtener el objeto JSON de esta manera:

Request = request.get_json()

Esto ha funcionado bien, sin embargo, estoy tratando de crear pruebas unitarias utilizando el módulo de prueba unitaria de Python y tengo dificultades para encontrar una manera de enviar un JSON con la solicitud.

response=self.app.post(''/test_function'', data=json.dumps(dict(foo = ''bar'')))

Esto me da:

>>> request.get_data() ''{"foo": "bar"}'' >>> request.get_json() None

Flask parece tener un argumento JSON donde puede establecer json = dict (foo = ''bar'') dentro de la solicitud de publicación, pero no sé cómo hacerlo con el módulo unittest.


Cambiar la publicación a

response=self.app.post(''/test_function'', data=json.dumps(dict(foo=''bar'')), content_type=''application/json'')

arreglado.

Gracias a user3012759.


ACTUALIZACIÓN: desde que Flask 1.0 lanzó los métodos flask.testing.FlaskClient acepta el argumento json y el método Response.get_json agregado, vea el example .

para el Frasco 0.x puede usar el recibo a continuación:

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