我在Flask中使用工厂模式。这是我的代码的简化版本:
def create_app():
app = Flask(__name__)
@app.before_request
def update_last_seen():
if current_user.is_authenticated:
current_user.update(last_seen=arrow.utcnow().datetime)
@app.route('/', methods=['GET'])
def home():
return render_template("home.html")
return app
我正在使用pytest-flask
,并且希望能够为update_last_seen
函数编写测试。
如何访问该功能?我无法在client.application(client
是通过pytest-flask自动使用的灯具)中找到它,也无法在我通过app
设置的conftest.py
灯具中找到它,如下所示:< / p>
@pytest.fixture
def app():
os.environ["FLASK_ENV"] = "test"
os.environ["MONGO_DB"] = "test"
os.environ["MONGO_URI"] = 'mongomock://localhost'
app = create_app()
app.config['ENV'] = 'test'
app.config['DEBUG'] = True
app.config['TESTING'] = True
app.config['WTF_CSRF_ENABLED'] = False
return app
因此,当我运行此测试时:
def test_previous_visit_is_stored_in_session(app, client):
app.update_last_seen()
我得到的错误是:
def test_previous_visit_is_stored_in_session(app, client):
> app.update_last_seen()
E AttributeError: 'Flask' object has no attribute 'update_last_seen'
我也一直在浏览app.before_request_funcs
,但不幸的是没有结果。
答案 0 :(得分:1)
参考the docs,您可以手动运行请求的预处理。
initial_last_seen = current_user.last_seen
with app.test_request_context('/'):
app.preprocess_request()
assert current_user.last_seen != initial_last_seen # ...for example