问题:如何在单元测试中使用JSON发送请求
我在Flask应用程序中包含在请求中使用JSON的代码,并且可以像这样获取JSON对象:
Request = request.get_json()
一切正常,但是我试图使用Python的unittest模块创建单元测试,并且很难找到一种发送带有请求的JSON的方法。
response=self.app.post('/test_function',
data=json.dumps(dict(foo = 'bar')))
这给了我:
>>> request.get_data()
'{"foo": "bar"}'
>>> request.get_json()
None
Flask似乎有一个JSON参数,您可以在其中发布请求中设置json = dict(foo =’bar’),但我不知道如何使用unittest模块来做到这一点。
回答 0
将帖子更改为
response=self.app.post('/test_function',
data=json.dumps(dict(foo='bar')),
content_type='application/json')
解决它。
感谢user3012759。
回答 1
更新:由于Flask 1.0发布的flask.testing.FlaskClient
方法接受json
参数和Response.get_json
添加的方法,请参见example。
对于Flask 0.x,您可以使用以下收据:
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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。