Python Flask单元测试环境变量

时间:2020-03-04 16:35:02

标签: python unit-testing flask

我在Flask中有一个Api,其中包含三个配置文件: development.cfg production.cfg testing.cfg

这些文件是根据此处的 FLASK_ENV 加载的:

def create_app():
    app = Flask(__name__)

    app.config.from_pyfile(f"config/{app.config['ENV']}.cfg")

    app.redis = redis.Redis(host=app.config['REDIS_HOST'], port=app.config['REDIS_PORT'])
    app.mongo = MongoClient(host=app.config['MONGO_DB_HOST'], port=int(app.config['MONGO_DB_PORT']))

    init_resources(app)

    return app

现在的问题是,执行测试时如何设置 FLASK_ENV ?例如,我有一个测试,我需要检查也是基于环境的SECRET_KEY,但是我从生产中获取了价值。

我在问自己是否应该将参数传递给create_app,例如:

def create_app(env):
    app = Flask(__name__)

    environment = app.config['ENV'] if not env else env

    app.config.from_pyfile(f"config/{environment}.cfg")

    app.redis = redis.Redis(host=app.config['REDIS_HOST'], port=app.config['REDIS_PORT'])
    app.mongo = MongoClient(host=app.config['MONGO_DB_HOST'], port=int(app.config['MONGO_DB_PORT']))

    init_resources(app)

    return app

然后在我的测试中,我会做类似的事情:

class TestLoginMethods(unittest.TestCase):
    def setUp(self):
        self.app = create_app(env='testing')
        ....

这有意义吗?

0 个答案:

没有答案