Как проверить функцию без просмотра на фабрике приложений Flask? - PullRequest
0 голосов
/ 21 мая 2019

Я использую фабричный шаблон во Flask.Это упрощенная версия моего кода:

def create_app():
    app = Flask(__name__)

    @app.before_request
    def update_last_seen():
        if current_user.is_authenticated:
            current_user.update(last_seen=arrow.utcnow().datetime)

    @app.route('/', methods=['GET'])
    def home():
         return render_template("home.html")

    return app

Я использую pytest-flask, и я хотел бы иметь возможность написать тест для функции update_last_seen.

Какя могу получить доступ к этой функции?Я не могу найти его ни в client.application (client - это прибор, автоматически используемый через pytest-flask), ни в моем app приборе, который я установил через conftest.py, например:

@pytest.fixture
def app():
    os.environ["FLASK_ENV"] = "test"
    os.environ["MONGO_DB"] = "test"
    os.environ["MONGO_URI"] = 'mongomock://localhost'

    app = create_app()
    app.config['ENV'] = 'test'
    app.config['DEBUG'] = True
    app.config['TESTING'] = True

    app.config['WTF_CSRF_ENABLED'] = False   

    return app

Поэтому, когда я запускаю этот тест:

def test_previous_visit_is_stored_in_session(app, client):
    app.update_last_seen()

Я получаю ошибку:

    def test_previous_visit_is_stored_in_session(app, client):
>       app.update_last_seen()
E       AttributeError: 'Flask' object has no attribute 'update_last_seen' 

Я тоже просматривал app.before_request_funcs, но, к сожалению, безрезультатно.

1 Ответ

1 голос
/ 22 мая 2019

Обращаясь к документам , вы можете вручную запустить предварительную обработку запроса.

initial_last_seen = current_user.last_seen

with app.test_request_context('/'):
    app.preprocess_request()

    assert current_user.last_seen != initial_last_seen # ...for example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...