我在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')
....
这有意义吗?