其他测试技巧除了如上文演示的使用测试客户端完成测试的方法,也有一个 app = flask.Flask(__name__)
with app.test_request_context('/?name=Peter'):
assert flask.request.path == '/'
assert flask.request.args['name'] == 'Peter'
所有其他的和上下文绑定的对象都可以使用同样的方法访问。 如果您希望测试应用在不同配置的情况下的表现,这里似乎没有一个 很好的方法,考虑使用应用的工厂函数(参考 应用程序的工厂函数) 注意,尽管你在使用一个测试用的请求环境,函数 app = flask.Flask(__name__)
with app.test_request_context('/?name=Peter'):
app.preprocess_request()
...
这对于打开数据库连接或者其他类似的操作来说,很可能 是必须的,这视您应用的设计方式而定。 如果您希望调用 app = flask.Flask(__name__)
with app.test_request_context('/?name=Peter'):
resp = Response('...')
resp = app.process_response(resp)
...
这通常不是很有效,因为这时您可以直接转向使用 测试客户端。 伪造资源和上下文0.10 新版功能. 在应用上下文或 def get_user():
user = getattr(g, 'user', None)
if user is None:
user = fetch_current_user_from_database()
g.user = user
return user
对于测试,这样易于从外部覆盖这个用户,而不用修改代码。连接 from contextlib import contextmanager
from flask import appcontext_pushed
@contextmanager
def user_set(app, user):
def handler(sender, **kwargs):
g.user = user
with appcontext_pushed.connected_to(handler, app):
yield
并且之后使用它: from flask import json, jsonify
@app.route('/users/me')
def users_me():
return jsonify(username=g.user.username)
with user_set(app, my_user):
with app.test_client() as c:
resp = c.get('/users/me')
data = json.loads(resp.data)
self.assert_equal(data['username'], my_user.username) |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-9-8 09:18 , Processed in 0.016463 second(s), 17 queries .