[python] Come inviare richieste con JSON in test unitari


0 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.




Related