我们正在使用一些自定义命令扩展 Flask-cli。该命令test
是其中之一:
# run.py: specified by FLASK_APP
# This is the Flask application object
app = create_app(os.getenv('FLASK_ENV') or 'default')
@app.cli.command()
def test():
"""Run the unit tests."""
tests = unittest.TestLoader().discover('tests')
test_runner = unittest.TextTestRunner()
test_runner.run(tests)
然而,一个典型的测试(使用 Python 的内置 unittest 模块)看起来像这样,它基于此处描述的样式。
# some-tests.py: unittest-based test case.
class SomeTestCase(unittest.TestCase):
def setUp(self):
self.app = create_app('testing')
self.app_context = self.app.app_context()
self.app_context.push()
def tearDown(self):
self.app_context.pop()
def test_load(self):
pass
我显然在这里遇到了一个反模式:我已经使用 default( development
) 配置初始化了一个烧瓶对象,因为我需要它用于@app.cli.command()
装饰器,这一切都发生在run.py
. 但是,一旦我在其中运行测试 setUp 函数,some-tests.py
我就必须以某种方式使用该配置获取一个 Flask 对象,例如,通过使用现在发生testing
的配置重新创建一个 Flask 应用程序。testing
我想知道如何实现一个flask-cli
测试命令,其中只Flask
创建一个对象,该对象在各种测试用例中重复使用,而无需testing
在我flask test
在命令行上运行之前明确设置环境。