flask - 带鼻子的单元测试会话
flask - unit testing session with nose
我正在尝试用 nose 测试以下代码。 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 文件中的打印语句不打印任何内容。这是否意味着索引函数不是 运行ning?
为什么会这样?根据烧瓶文档(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 有什么区别?据我了解,两者的重点是让请求上下文保持更长时间。
您只是在设置您的请求上下文。您实际上需要让您的应用分派请求才能发生任何事情——类似于您在完整客户端中的 c.get()。
试试下面的方法,我想你会有更好的运气:
def test_index():
with app.test_request_context('/'):
app.dispatch_request()
print('>>>>test session:', session)
assert_equal(session.get('key'), 'value')
我正在尝试用 nose 测试以下代码。 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 文件中的打印语句不打印任何内容。这是否意味着索引函数不是 运行ning?
为什么会这样?根据烧瓶文档(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 有什么区别?据我了解,两者的重点是让请求上下文保持更长时间。
您只是在设置您的请求上下文。您实际上需要让您的应用分派请求才能发生任何事情——类似于您在完整客户端中的 c.get()。
试试下面的方法,我想你会有更好的运气:
def test_index():
with app.test_request_context('/'):
app.dispatch_request()
print('>>>>test session:', session)
assert_equal(session.get('key'), 'value')