2011-09-15 17 views

Trả lời

31

Bạn đã đọc Flask docs about testing chưa?

Bạn có thể sử dụng như sau:

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', ...)) 

phiên bản phát triển hiện tại của Flask cũng bao gồm hỗ trợ cho 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

Vì vậy, .get chỉ hy vọng bạn thêm các tham số ở cuối truy vấn, như vậy - '? Param1 = value & param2 = value2' - hoặc nó có thể nhận được một dict không? – sssilver

+0

@sssilver Bạn đã thử những gì? :) – plaes

+0

Tôi đã thử cả hai, chỉ có tùy chọn đầu tiên hoạt động. Tại sao bạn hỏi? – sssilver

29

POST:

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

GET:

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

self._add_file_from_data (khóa, giá trị) Tệp "/usr/local/lib/python3.5/dist-packages/werkzeug/test.py", dòng 355, trong _add_file_from_data self.files.add_file (khóa, ** giá trị) TypeError: add_file() nhận đối số từ khóa bất ngờ 'birthDate' – Crusader

0

Tôi vẫn gặp vấn đề với điều này khi kiểm tra dữ liệu biểu mẫu bài đăng để đăng nhập vào tài khoản này có hiệu quả đối với tôi.

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') 

Tôi thấy đây là cách này.

Chrome: chế độ nhà phát triển -> Đốc -> HTML doc đã được yêu cầu - dữ liệu> Form - -> Headers Tab> xem mã nguồn

2

Nếu bạn thích sử dụng 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

'với testapp.test_request_context (tiêu đề = h):' có thể được sử dụng để chuyển ** tiêu đề ** mà không đề cập đến bất kỳ ** url ** nào, điều này sẽ thử một yêu cầu với _default-url_ – Abhijeet

Các vấn đề liên quan