您没有正确使用工厂模式。您应该使用蓝图收集路线并在工厂中将其注册到应用程序中。(或
app.add_url_rule在工厂中使用。)工厂外的任何物品均不影响应用程序。
现在,您创建该应用程序的实例,然后使用该实例注册路由。然后,您在测试中创建另一个实例,该实例未注册路由。由于该实例没有任何注册的路由,因此它会返回404以请求对这些url的请求。
相反,请向蓝图注册您的路线,然后在工厂中向应用程序注册蓝图。在测试过程中使用工厂创建应用程序。将工厂传递给Flask-
script管理器。您无需手动推送应用上下文。
from flask import Flask, Blueprintfrom flask_script import Managerfrom unittest import TestCasebp = Blueprint('myapp', __name__)@bp.route('/')def index(): return 'Hello, World!'def create_app(config='dev'): app = Flask(__name__) # config goes here app.register_blueprint(bp) return appclass SomeTest(TestCase): def setUp(self): self.app = create_app(config='test') self.client = self.app.test_client() def test_index(self): rv = self.client.get('/') self.assertEqual(rv.data, b'Hello, World!')manager = Manager(create_app)manager.add_option('-c', '--config', dest='config', required=False)if __name__ == '__main__': manager.run()


