gpt4 book ai didi

python - Flask-Assets 和 Flask-Testing 抛出 RegisterError : Another bundle is already registered

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:31 25 4
gpt4 key购买 nike

我的 Flask 应用程序使用 Flask-Assets,在尝试运行单元测试用例时,除了第一个测试用例,其他测试用例失败并出现以下 RegisterError。

======================================================================
ERROR: test_login_page (tests.test_auth.AuthTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/cnu/env/flenv/lib/python2.7/site-packages/nose/case.py", line 133, in run
self.runTest(result)
File "/Users/cnu/env/flenv/lib/python2.7/site-packages/nose/case.py", line 151, in runTest
test(result)
File "/Users/cnu/env/flenv/lib/python2.7/site-packages/flask_testing.py", line 72, in __call__
self._pre_setup()
File "/Users/cnu/env/flenv/lib/python2.7/site-packages/flask_testing.py", line 80, in _pre_setup
self.app = self.create_app()
File "/Users/cnu/Projects/Bookworm/App/tests/test_auth.py", line 8, in create_app
return create_app('testing.cfg')
File "/Users/cnu/Projects/Bookworm/App/bookworm/__init__.py", line 118, in create_app
configure_extensions(app)
File "/Users/cnu/Projects/Bookworm/App/bookworm/__init__.py", line 106, in configure_extensions
assets.register('js_all', js)
File "/Users/cnu/env/flenv/src/webassets/src/webassets/env.py", line 374, in register
'as "%s": %s' % (name, self._named_bundles[name]))
RegisterError: Another bundle is already registered as "js_all": <Bundle output=assets/packed.js, filters=[<webassets.filter.jsmin.JSMin object at 0x10fa8af90>], contents=('js/app.js',)>

我对为什么在第一个测试用例运行之前会发生这种情况的理解是,create_app 创建了一个 app 实例,并为所有其他测试用例维护。

我在拆卸方法中尝试了 del(app),但没有帮助。

有什么办法可以解决吗?

最佳答案

你可能有一个 Assets 环境的全局对象,你已经这样声明了:

在文件 app/extensions.py 中:

from flask.ext.assets import Environment
assets = Environment()

然后,在您的 create_app 方法中的某处,您应该初始化环境:

在文件 app/__init__.py 中:

from .extensions import assets

def create_app():
app = Flask(__name__)
...
assets.init_app(app)
...
return app

问题在于,当您使用应用程序初始化环境时,不会清除已注册的 bundle 。所以你应该在你的测试用例中手动完成:

在文件 tests/__init__.py

from app import create_app
from app.extensions import assets

class TestCase(Base):

def create_app(self):
assets._named_bundles = {} # Clear the bundle list
return create_app(self)

希望对您有所帮助,干杯

关于python - Flask-Assets 和 Flask-Testing 抛出 RegisterError : Another bundle is already registered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11981187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com