2

我在使简单(非 json)参数与 POST 一起工作时遇到问题。仅以他们教程中的简单示例为例,我无法在任务作为参数传递的情况下进行单元测试。但是任务永远不会传入。它没有。

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)

请问我错过了什么?

4

1 回答 1

0

使用'task=test' test_client时不要设置application/x-www-form-urlencoded内容类型,因为您将字符串放入输入流。因此,flask 无法检测表单并从表单中读取数据,并且reqparse会为这种情况返回None任何值。

要修复它,您必须设置内容类型或使用字典{'task': 'test'}或元组。

client = self.app.test_client()也为了更好地使用请求测试app = self.app.test_client(),如果你使用FlaskTesting.TestCase类,那么只需调用self.client.post.

于 2013-11-11T20:39:46.960 回答