我在使用POST时使用简单(非json)参数时遇到问题。只是从他们的教程中取出简单的example,我无法进行单元测试,其中任务作为参数传递。然而,任务永远不会传入。它没有。
class TodoList(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('task', type = str)
super(TodoList, self).__init__()
def post(self):
args = self.reqparse.parse_args()
#args['task'] is None, but why?
return TODOS[args['task']], 201
单元测试:
def test_task(self):
rv = self.app.post('todos', data='task=test')
self.check_content_type(rv.headers)
resp = json.loads(rv.data)
eq_(rv.status_code, 201)
我错过了什么?
答案 0 :(得分:0)
使用'task=test'
test_client
时,请不要设置application/x-www-form-urlencoded
内容类型,因为您将字符串放入输入流。因此,无法检测表单并从表单中读取数据,reqparse
将为此案例的任何值返回None
。
要解决此问题,您必须设置内容类型或使用dict {'task': 'test'}
或元组。
对于请求测试更好地使用client = self.app.test_client()
代替app = self.app.test_client()
,如果您使用FlaskTesting.TestCase
类,则只需致电self.client.post
。