Flask login_user не работает с pytest

Я новичок в Pytest. Я хочу протестировать свои представления, требующие входа в систему (украшенные @login_required).
У меня есть следующая тестовая функция:

def test_add_new_post(self, client, user):
    login_user(user)
    assert current_user == user
    data = {
        'title': 'This is test post',
        'body': 'This is test body'
    }
    client.post(url_for('posts.add_new'), data=data)
    assert Post.query.count() == 1

где client:

@pytest.fixture(scope='session')
def client(request, app):
    return app.test_client()

assert current_user == user возвращает True, но client.post возвращает страницу входа, потому что login_required перенаправляет на страницу входа. Почему это происходит и как правильно это сделать?


person moriesta    schedule 07.12.2014    source источник


Ответы (2)


возможно, не самый простой способ, но: «Может быть удобно глобально отключить аутентификацию при модульном тестировании. Чтобы включить это, если для любой из переменных конфигурации приложения LOGIN_DISABLED или TESTING установлено значение True, этот декоратор будет проигнорирован». через https://pythonhosted.org/Flask-Security/api.html

person brobas    schedule 07.12.2014

Это сработало для меня (на основе этого комментария) :

def test_with_authenticated_user(app):
    @app.login_manager.request_loader
    def load_user_from_request(request):
        return User.query.first()
    # now you can call client.post or similar methods
person dusan    schedule 01.10.2019