Наилучшим подходом, вероятно, является заполнение переменной g.user
, как это предлагается в документах Flask :
def get_user():
user = getattr(g, 'user', None)
if user is None:
user = fetch_current_user_from_database()
g.user = user
return user
Очевидно, вы должны определить fetch_current_user_from_database()
, где вы будете создавать экземпляр пользователя (у вас есть User
класс, я полагаю) и возвращать его. Затем просто позвоните get_user()
, чтобы мгновенно войти в систему, когда это необходимо.
В качестве альтернативы, вы можете добавить флаг в ваши настройки, чтобы отключить вход в систему и использовать его в вашем методе login_required
при тестировании.
Например:
from flask import current_app
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_app.config.get('LOGIN_DISABLED', False) and g.user is None:
return redirect(url_for('accounts_app.login', next=request.url))
return f(*args, **kwargs)
return decorated_function
Тогда в вашем тесте:
def test_render(self):
# without login
resp = self.client.get(self.url)
self.assertRedirects(resp, self.url_login_redirect)
self.app.config['LOGIN_DISABLED'] = True
resp = c.get(self.url)
self.assertStatus(resp, 200)