我有以下代码,它接受POST请求并处理它。
index.py
@app.route('/route', methods=['POST'])
def route_post():
try:
data = request.get_data()
j = json.loads(data)
except Exception as e:
...
基本上,我想访问request.get_data(),以便我可以更改值。我正在调用如下所示的测试,这很简单。
route_test.py:
def test_route():
assert(("Bad Request\r\n", 400) == route_post())
但是不允许我设置request.get_data()的值。我怎么能这样做?
答案 0 :(得分:2)
使用测试客户端将您需要的任何数据发布到路由中。如果data
是一个字符串或字节,Werkzeug将直接发送数据,如字节。
from flask import Flask, request
app = Flask(__name__, static_folder=None)
@app.route('/', methods=['POST'])
def index():
return request.get_data()
c = app.test_client()
r = c.post('/', data='Hello, World!')
print(r.data) # b'Hello, World!'
答案 1 :(得分:0)
您可以使用模拟对象修补请求对象的方法get_data,该对象返回您要返回的内容。有点像:
from mock import patch
@patch('flask.Request.get_data')
def test_route_post(self, get_deta_mock):
get_deta_mock.return_value = '{"foo": "bar"}'
result = route_post()
assert result['foo'] == 'bar'