【发布时间】:2018-11-24 18:45:08
【问题描述】:
我正在尝试用鼻子测试以下代码。 app.py 文件如下:
from flask import Flask, session, redirect, url_for, request
app = Flask(__name__)
@app.route('/')
def index():
session['key'] = 'value'
print('>>>> session:', session)
return redirect(url_for("game"))
测试文件如下:
from nose.tools import *
from flask import session
from app import app
app.config['TESTING'] = True
web = app.test_client()
def test_index():
with app.test_request_context('/'):
print('>>>>test session:', session)
assert_equal(session.get('key'), 'value')
当我运行测试文件时,我得到一个断言错误None != 'value'
并且测试文件中的打印语句打印一个空的会话对象。此外,app.py 文件中的 print 语句不会打印任何内容。这是否意味着索引函数没有运行?
为什么会这样?根据烧瓶文档(http://flask.pocoo.org/docs/1.0/testing/#other-testing-tricks), 我应该可以通过 test_request_context() 访问会话内容。
另外,如果我改为这样编写 test_index 函数,则测试可以正常工作(app.py 和测试文件中的打印语句都会被执行):
def test_index():
with app.test_client() as c:
rv = c.get('/')
print('>>>>test session:', session)
assert_equal(session.get('key'), 'value')
在 'with' 语句中使用 Flask.test_client() 和 Flask.test_request_context 有什么区别?据我了解,两者的重点是让请求上下文保持更长时间。
【问题讨论】:
标签: python python-3.x flask nose