我在基于烧瓶类的视图中有一个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)
答案 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
中。您可以在(或非None
代码中查看,例如sourcecode例外)自行查看。