исправление во время тестирования приложения колбы вызывает AssertionError: отображение функции представления перезаписывает существующую функцию конечной точки - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь написать тесты для приложения Flask.

В настоящее время у меня есть тест, который выглядит следующим образом в файле с именем test.py.

import mock
from test_helpers import mock_volume_views_setup

class UserTest(unittest.TestCase):

    def setUp():
        <some set up>

    def tearDown():
        <some tear down>

    @mock.patch('brain_db.views.volume_views_setup')
    def test_labeled_scan(self, mock_volume_views_setup):
        # test that if path to atlas exists in the container,
        self.register_and_commit_user()
        self.login_profile_consent()
        self.upload('static/test.nii.gz', 1, '04/04/2008', 'GE', '1.5T')
        rv = self.app.get('/label_view/1', follow_redirects=True)
        response = str(rv.data)
        assert "MRI not labeled yet" not in response

test.py содержит каталог верхнего уровня, flask_brain_db.

В flask_brain_db / brain_db / views.py живет маршрут, который я пытаюсь проверить.Очень упрощенная версия:

from brain_db_helpers import volume_views_setup

@app.route('/surface_test')
def surface_test():
    return render_template('brain_db/surf_view.html')

@app.route('/label_view/<int:scan_number>')
@login_required
def label_view(scan_number):
    a, b, c, d = volume_views_setup(scan_number, resource_type='atlas')
    if os.path.exists(a):
        return render_template('brain_db/scan_view.html')

Когда я пытаюсь запустить свой тест, я получаю

FAIL: test_labeled_scan (test.UserTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/mock/mock.py", line 1297, in patched
    arg = patching.__enter__()
  File "/usr/local/lib/python2.7/site-packages/mock/mock.py", line 1353, in __enter__
    self.target = self.getter()
  File "/usr/local/lib/python2.7/site-packages/mock/mock.py", line 1523, in <lambda>
    getter = lambda: _importer(target)
  File "/usr/local/lib/python2.7/site-packages/mock/mock.py", line 1210, in _importer
    thing = _dot_lookup(thing, comp, import_path)
  File "/usr/local/lib/python2.7/site-packages/mock/mock.py", line 1199, in _dot_lookup
    __import__(import_path)
  File "/usr/src/app/flask_brain_db/brain_db/views.py", line 36, in <module>
    @app.route('/surface_test')
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1250, in decorator
    self.add_url_rule(rule, endpoint, f, **options)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 66, in wrapper_func
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1221, in add_url_rule
    'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint function: surface_test

Я понимаю, что пытается сообщить эта ошибка.Каким-то образом мой патч-декоратор при импорте повторно выполняет код, который определяет маршруты в views.py, что приводит к ошибке.(Ошибка не появляется без декоратора патча и фиктивной функции).Но я не понимаю, почему или как я должен исправить мой вспомогательный метод.Я действительно изо всех сил пытался понять правильный способ обращения к методу, который требует исправления, но, глядя на этот вопрос , например, я думаю, что я делаю это правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...