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