我将Flask-Migrate集成到了我的项目中。使用开发模式(flask db migrate
)时,我通常会调用FLASK_ENV='testing'
将更改应用于SQLite数据库。但是,在测试模式(sqlite:///:memory:
)中,我使用的是内部存储器(db migrate
),因此无法调用testing
,因为它将最终抛出error。有什么方法可以在Flask CLI中创建“ pre_execute”挂钩,以在执行命令之前检查使用哪个ENV?因此,例如,如果FLASK_ENV设置为flask db init
,则调用@click.group(cls=FlaskGroup, create_app=create_app)
def cli():
'''
Main entry point.
'''
if app.config.ENV == ENV.TESTING:
print('Running in TESTING mode...Aborting!')
sys.exit(1)
将导致中止命令的执行。我已经尝试过类似的方法,但是没有用:
FLASK_ENV
问题:如何在某些FLASK_ENV
设置下中止cli命令的执行?
编辑:我正在从.env
文件中加载{{1}}值。
答案 0 :(得分:0)
好的,也许一开始我尝试用错误的方法解决问题,但是我终于找到了解决问题中提到的错误的方法。因为我从文件加载了FLASK_ENV
的值,所以每次我要切换环境时都需要手动更改它。因此,我要做的就是修改测试CLI命令,以在每次执行FLASK_ENV
之前将testing
的值设置为pytest
:
@click.command()
def test():
'''
Run tests.
'''
os.environ['FLASK_ENV'] = ENV.TESTING
pytest.main(['--rootdir', './tests'])
现在,即使FLASK_ENV
文件中的development
设置为.env
,我仍然可以在testing
模式下运行测试,而无需更改文件中的值。