在测试中捕获Flask中止状态代码?

时间:2016-07-13 14:36:09

标签: python flask

我在基于烧瓶类的视图中有一个abort()。我可以断言已经调用了中止,但我无法在上下文管理器中访问406代码。

views.py

from flask.views import View
from flask import abort

class MyView(View):

    def validate_request(self):
        if self.accept_header not in self.allowed_types:
            abort(406)

tests.py

from werkzeug.exceptions import HTTPException

def test_validate_request(self):
    # Ensure that an invalid accept header type will return a 406

    self.view.accept_header = 'foo/bar'
    with self.assertRaises(HTTPException) as http_error:
        self.view.validate_request()
        self.assertEqual(http_error.???, 406)

2 个答案:

答案 0 :(得分:2)

好的,我是个白痴。不敢相信我之前没有注意到这一点。 http_error中有一个异常对象。在我的测试中,我在调用validate_request之前调用了http_error,所以我错过了它。这是正确的答案:

from werkzeug.exceptions import HTTPException

def test_validate_request(self):
    # Ensure that an invalid accept header type will return a 406

    self.view.accept_header = 'foo/bar'
    with self.assertRaises(HTTPException) as http_error:
        self.view.validate_request()
        self.assertEqual(http_error.exception.code, 406)

P.S。孩子们,在你累死的时候不要编码。 :(

答案 1 :(得分:1)

在werkzeug库中,http错误代码保存在HTTPException.None中。您可以在enter image description here(或非None代码中查看,例如sourcecode例外)自行查看。