2011-09-15 3 views

risposta

31

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']) 
+0

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

+0

@sssilver Cosa hai provato? :) – plaes

+0

Ho provato entrambi, solo la prima opzione funzionava. Perché lo chiedi? – sssilver

29

POST:

self.app.post('/endpoint', data=params) 

GET:

self.app.get('/endpoint', query_string=params) 
+0

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

0

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

2

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) 
+1

'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