Тесты для Flask Blueprint дают атрибуты error - PullRequest
0 голосов
/ 07 мая 2018

Я пишу тесты для моего приложения, используя unittest в Python3.6. Я создаю простое приложение Flask для этого теста, в котором я хочу зарегистрировать свои определенные чертежи. Проблема, которую я получаю, заключается в следующем: когда я пытаюсь импортировать свои чертежи, это:

  File "/app/test/__init__.py", line 1, in <module>
    from . import test_views
  File "/app/test/test_views.py", line 50, in <module>
    from api.metrics.views import stats
  File "/app/api/metrics/__init__.py", line 1, in <module>
    from .views import stats
  File "/app/api/metrics/views.py", line 13, in <module>
    def get_stats(client=None):
  File "/testenv/lib/python3.6/site-packages/flask/blueprints.py", line 161, in decorator
    endpoint = options.pop("endpoint", f.__name__)
  File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/mock.py", line 584, in __getattr__
    raise AttributeError(name)
AttributeError: __name__

Ошибка возникает, когда я звоню @stats.route ... в этом коде:

stats = Blueprint('metrics', __name__)

@stats.route('/metrics', methods=['POST'])
@setup.require_suth
def get_metrics(client=None):
  <This code is not relevant>

Кто-нибудь знает, как это сделать правильно? Я действительно не могу понять, как это сделать.

Это моя структура:

/app
  /api 
     /metrics
       __init__.py
       views.py
  /test
       test_views.py 

А вот оператор импорта в моих тестах:

app_ = define_test_app()
from api.metrics.views import stats
app_.register_blueprint(stats)

Буду признателен за помощь, поскольку я полностью застрял на этом этапе.

1 Ответ

0 голосов
/ 07 мая 2018

У вас есть ошибка, когда вы звоните, чтобы зарегистрировать свой проект, вместо app_.register_blueprint просто используйте app.register_blueprint, попробуйте это:

/app
  /api 
     /metrics
       __init__.py
       views.py

views.py

from flask import Blueprint

stats = Blueprint('metrics', __name__)


@stats.route('/metrics', methods=['GET', 'POST'])
def get_metrics(client=None):
    return 'Hello'

/app
  /test
     test.py

test.py

from flask import Flask

app = Flask(__name__)

from api.metrics.views import stats
app.register_blueprint(stats)

if __name__ == '__main__':
    app.run()
...