Vorrei simulare i parametri di richiesta per il test dell'unità. Come posso ottenere questo risultato in Flask?Come posso falsificare request.POST e GET param per il test dell'unità in Flask?
risposta
Hai letto Flask docs about testing?
È possibile utilizzare seguente:
self.app.post('/path-to-request', data=dict(var1='data1', var2='data2', ...))
self.app.get('/path-to-request', query_string=dict(arg1='data1', arg2='data2', ...))
versione di sviluppo attuale di Flask include anche il supporto per testing JSON APIs:
from flask import request, jsonify
@app.route('/jsonapi')
def auth():
json_data = request.get_json()
attribute = json_data['attr']
return jsonify(resp=generate_response(attribute))
with app.test_client() as c:
rv = c.post('/jsonapi', json={
'attr': 'value', 'other': 'data'
})
json_data = rv.get_json()
assert generate_response(email, json_data['resp'])
POST:
self.app.post('/endpoint', data=params)
GET:
self.app.get('/endpoint', query_string=params)
self._add_file_from_data (chiave, valore) File "/usr/local/lib/python3.5/dist-packages/werkzeug/test.py", riga 355, in _add_file_from_data self.files.add_file (chiave, ** value) TypeError: add_file() ottenuto un argomento di parole chiave inattese 'birthDate' – Crusader
Ho ancora riscontrato problemi durante il test dei dati del modulo per l'accesso.
def login(self, username, password):
return self.app.post('/', data='Client_id=' + username +'&Password=' + password,
follow_redirects=True,content_type='application/x-www-form-urlencoded')
Ho trovato questo è fuori in questo modo.
Chrome: Modalità sviluppatore -> Doc -> HTML doc che è stato richiesto - dati> Modulo - -> intestazioni Tab> visualizza sorgente
Se si preferisce utilizzare test_request_context
:
import unittest from myapp import extract_query_params testapp = flask.Flask(__name__) class TestFoo(unittest.TestCase): def test_happy(self): with testapp.test_request_context('?limit=1&offset=2'): limit, offset = extract_query_params(['limit', 'offset']) self.assertEquals(limit, 1) self.assertEquals(offset, 2)
'con testapp.test_request_context (header = h):' può essere usato per passare ** headers ** senza menzionare ** url **, questo sarà simulare una richiesta con _default-url_ – Abhijeet
Quindi, .get si aspetta solo di aggiungere i parametri alla fine della query, in questo modo - '? Param1 = value & param2 = value2' - o può anche ricevere un dict? – sssilver
@sssilver Cosa hai provato? :) – plaes
Ho provato entrambi, solo la prima opzione funzionava. Perché lo chiedi? – sssilver