py.test来测试烧瓶寄存器,AssertionError:弹出错误的请求上下文

Spi*_*rit 16 python pytest flask-login

我正在使用烧瓶进行注册和登录:

from flask.ext.security.views import register, login

class Register(Resource):
    def post(self):
        return register()

class Login(Resource):
    def post(self):
        return login()

api.add_resource(Login, '/login')
api.add_resource(Register, '/register')
Run Code Online (Sandbox Code Playgroud)

然后我使用py.test来测试类:

class TestAPI:
    def test_survey(self, app):
        client = app.test_client()
        data = {'email': 'test@test', 'password': 'password'}
        rv = client.post('/2014-10-17/register',
                          data=json.dumps(data))
        ...
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,错误发生如下:

AssertionError: Popped wrong request context.  (<RequestContext 'http://localhost/2014-10-17/register' [POST] of panel.app> instead of <RequestContext 'http://localhost/' [GET] of panel.app>)
Run Code Online (Sandbox Code Playgroud)

你知道为什么吗?在测试登录时,没有这样的错误

Jim*_*ian 24

这是一个已知的烧瓶问题.您会收到两个例外而不是一个.只需添加PRESERVE_CONTEXT_ON_EXCEPTION = False到您的测试配置.


mrq*_*ous 5

看来您必须用以下内容包装测试调用:

with self.app.test_client() as client:
    data = {'email': 'test@test', 'password': 'password'}
    rv = client.post('/2014-10-17/register', data=json.dumps(data))
    ...
Run Code Online (Sandbox Code Playgroud)