在Flask应用程序的单元测试期间访问会话对象

时间:2017-03-29 21:43:18

标签: python session flask

我知道可以使用session_transaction()方法创建会话对象。但是,有没有办法访问当前会话对象,例如" /"路线受到打击?我做from flask import session来访问会话但它是空的。如果有可能请告诉我。感谢。

2 个答案:

答案 0 :(得分:4)

This正是您要找的。但是,正如它所说,您必须使用您在with语句中创建的实例化。

with app.test_client() as c:
    with c.session_transaction() as sess:
        sess['a_key'] = 'a value'

    # once this is reached the session was stored

请注意,如果您在with c.session_transaction() as sess语句的范围内运行测试,则无法执行此操作,需要在该块之后运行

答案 1 :(得分:0)

如果要从测试中读取视图中写入的会话数据,一种方法是将会话视图模拟为dict并验证测试中的会话。以下是使用Python's unittest.mock的示例:

<强> app.py

app.factory("datafactory",function("dataFactory"){
    var mouse={}
    mouse.dosum=function(){
    return "my world";
}

});

    app.controller(" mycontroller",function(){
$scope.clickme=function(){
     $scope.message=datafactory.dosum()
    }});

    app.controller(" mycontroller",function(){
     $scope.message=datafactory.dosum()
    });

<强> test_index.py

from flask import Flask, session, request

app = Flask(__name__)

app.config["SECRET_KEY"] = "my secret key"

@app.route("/", methods=["POST"])
def index():
    session["username"] = request.form["username"]
    return "Username saved in session"

当然,您可以使用您喜欢的任何模拟解决方案。