Bri*_*unt 12 flask python-unittest
我正在测试一个Flask应用程序(Flask 0.9),特别是我有一个会话夹具,我想以文档化的方式运行,就像这样(我理解):
from flask import Flask, session
app = Flask(__name__)
@app.route('/', methods=['POST'])
def m():
logging.error(session) # expect {'x': 1}
return ""
with app.test_request_context() as trc:
with app.test_client() as c:
with c.session_transaction() as sess:
sess['x'] = 1
c.post()
Run Code Online (Sandbox Code Playgroud)
这按预期工作,输出如下:
ERROR:root:<SecureCookieSession {'x': 1}>
Run Code Online (Sandbox Code Playgroud)
不幸的是我遇到了意外的结果,其中会话数据没有在端点函数中设置,即输出是这样的:
ERROR:root:<SecureCookieSession {}>
Run Code Online (Sandbox Code Playgroud)
只有从我的单元测试框架运行时才会出现此问题.就目前情况而言,我无法用堕落的情况重现这个问题,尽管我已经做了相当大的努力,其中有一些努力.重要的是我已经包括在内,itsdangerous并Google App Engine testbed期待其中一个可能是原因.
在我自己的系统上,我已经超越了要点,几乎完全复制了我的单元测试框架,试图将其隔离开来.同样,我从测试框架中删除了越来越多的相关代码.到目前为止,我无法想到退化案例与我可能影响结果的精简框架之间的差异.我已经遍历了c.post()pdb中的调用来尝试找出这种恶意的原因,但还没有收集任何有用的见解.
这就是说,我会对这个问题可能存在的方向或建议表示感谢.什么可能影响Werkzeug的背景,以至于session_transaction没有被尊重?
这是我最终所做的:
# Code that modifies the current `session`; we must be in a test context already.
headers = {}
with self.client.session_transaction():
# Get the cookie that is sent to the browser to establish a connection
# via a fake request.
response = make_response()
self.app.session_interface.save_session(self.app, session, response)
headers['Cookie'] = response.headers.get('Set-Cookie', '')
self.client.post(..., headers=headers) # also works for .get, .put, etc.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1536 次 |
| 最近记录: |