[python] Come inviare richieste con JSON in test unitari



Answers

Ricetta semplice per testare le applicazioni di flacone JSON

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
Question

Ho un codice all'interno di un'applicazione Flask che usa JSON nella richiesta, e posso ottenere l'oggetto JSON in questo modo:

Request = request.get_json()

Questo ha funzionato bene, tuttavia sto cercando di creare dei test unitari usando il modulo unittest di Python e ho difficoltà a trovare un modo per inviare un JSON con la richiesta.

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

Questo mi dà:

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

Flask sembra avere un argomento JSON in cui è possibile impostare json = dict (foo = 'bar') all'interno della richiesta di post, ma non so come farlo con il modulo unittest.




Links