代码之家  ›  专栏  ›  技术社区  ›  DAG

Python单元测试flask_restful-请求解析器

  •  0
  • DAG  · 技术社区  · 5 年前

    我正在用Python编写一个API,我正在使用 Flask-RESTFul 我有一个 登录 接收方法 电子邮件 密码 作为请求参数,两者都是必需的:

    class Login(Resource):
    
        def __init__(self):
            self.parser = reqparse.RequestParser()
            self.parser.add_argument('email', required=True)
            self.parser.add_argument('password', required=True)
    

    代码运行得很好。如果我在没有请求参数的情况下通过Postman尝试请求,Flask RESTFul会发送一个响应错误,指出电子邮件和密码是必填字段。

    现在我想为此编写一个单元测试。测试实际上应该很简单:

    @mock.patch('flask_restful.reqparse.RequestParser.parse_args')
    class TestLoginMethods(unittest.TestCase):
    
        def test_post_body_missing(self, parse_args):
            self.login = Login()
            self.login.post()
            # TODO: should assert error when Email and Password not found in request
    
    

    这里的问题是 parse_args Flask RESTFul为必填字段引发错误的功能被嘲笑了。 这意味着,如果未提供电子邮件和密码,则不会返回错误 .如何终止此功能 RequestParser ?我是python新手,我只能找到没有Flask RESTFul的例子。

    0 回复  |  直到 5 年前
        1
  •  0
  •   DAG    5 年前

    拥有 parse_args 在测试中工作必然是为了嘲笑全球 request current_app flask

    @mock.patch('flask_restful.reqparse.request')
    @mock.patch('flask_restful.reqparse.current_app')
    class TestLoginMethods(unittest.TestCase):
        def setUp(self):
            self.login = Login()
    
        def tearDown(self):
            pass
    
        def test_post_request_without_email(self, mock_request, mock_current_app):
            try:
                self.login.post()
            except Exception as e:
                self.assertTrue(isinstance(e, BadRequest))
                self.assertEqual(e.data['message']['email'], 'Missing required parameter in the JSON body or the post '
                                                             'body or the query string')