У меня возникли проблемы с созданием чертежей Flask-Admin, когда я тестирую свое приложение.Создание проекта Flask-Admin во время тестирования
Это мой Посмотреть класс (используя SQLAlchemy)
##
# All views that only admins are allowed to see should inherit from this class.
#
class AuthView(ModelView):
def is_accessible(self):
return current_user.is_admin()
class UserView(AuthView):
column_list = ('name', 'email', 'role_code')
Это, как я инициализацию просмотров:
# flask-admin
admin.add_view(UserView(User, db.session))
admin.init_app(app)
Однако, когда я пытаюсь запустить более одного теста (ошибка всегда происходит во втором тесте и во всех других тестах, которые следуют), я всегда получаю следующее сообщение об ошибке:
======================================================================
ERROR: test_send_email (tests.test_views.TestUser)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/lib/python2.7/site-packages/nose/case.py", line 133, in run
self.runTest(result)
File "/lib/python2.7/site-packages/nose/case.py", line 151, in runTest
test(result)
File "/lib/python2.7/site-packages/flask_testing.py", line 72, in __call__
self._pre_setup()
File "/lib/python2.7/site-packages/flask_testing.py", line 80, in _pre_setup
self.app = self.create_app()
File "/tests/test_init.py", line 27, in create_app
app = create_app(TestConfig)
File "/fbone/app.py", line 41, in create_app
configure_extensions(app)
File "/fbone/app.py", line 98, in configure_extensions
admin.add_view(UserView(User, db.session))
File "/lib/python2.7/site-packages/flask_admin/base.py", line 484, in add_view
self.app.register_blueprint(view.create_blueprint(self))
File "/lib/python2.7/site-packages/flask/app.py", line 62, in wrapper_func
return f(self, *args, **kwargs)
File "/lib/python2.7/site-packages/flask/app.py", line 885, in register_blueprint
(blueprint, self.blueprints[blueprint.name], blueprint.name)
AssertionError: A blueprint's name collision occurred between <flask.blueprints.Blueprint object at 0x110576910> and <flask.blueprints.Blueprint object at 0x1103bd3d0>. Both share the same name "userview". Blueprints that are created on the fly need unique names.
Странно, что это происходит только во втором тесте, и никогда, когда я просто запускаю приложение.
Когда я отлаживал тесты, первый раз он выполнил именно то, что я ожидал, и добавил проект в приложение после init_app (app). Во второй раз, однако, процесс сразу же прекратился, когда вы достигли шага add_view (что, я думаю, странно, потому что чертежи регистрируются в вызове init_app (приложение)?)
Когда вы говорите «в первый раз», вы имеете в виду в своем первом тесте или вы говорите, что ваш модульный тест завершен, и вы снова используете весь тестовый костюм. – AlexLordThorsen
Я имею в виду первый тест – arnoutaertgeerts
Убедитесь, что вы создали новый экземпляр класса 'Admin' на своей фабрике приложений для каждого теста. Похоже, вы продолжаете добавлять представления к существующему экземпляру класса Admin для каждого тестового прогона. – Joes