2013-04-26 6 views
9

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

Я использую расширение Flask-Login для реализации входа/выхода из системы.

Очевидно, что я могу выполнить анонимный запрос, но как смоделировать запрос от зарегистрированного пользователя?

Я думал, что этого достаточно, чтобы отправить в заголовки файл cookie session, но он не работает.

headers = Headers({'Cookie':['WEBSITE_ID=%s; Domain=adsabs.harvard.edu; expires=Thu, 25-Apr-2213 16:53:22 GMT; Path=/' % cookie_value, 
          'WEBSITE_ID=%s; Domain=.adsabs.harvard.edu; expires=Thu, 25-Apr-2213 16:53:22 GMT; Path=/' % cookie_value, 
          'session="A VERY LONG STRING"; Path=/; HttpOnly', 
       ]}) 
rv = app.test_client().get('/', headers=headers) 

Где значение cookie сеанса является значением, которое я получил от реального входа в мой браузер.

Что мне не хватает?

ответ

17

Колба-Войти ищет user_id в сессии, вы можете установить это в тестах с использованием session_transaction:

with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True # https://flask-login.readthedocs.org/en/latest/#fresh-logins 
    resp = c.get('/someurl') 

Где myuserid это идентификатор вашего user object.

+1

Знаете ли вы, почему, если я пошлю cookie в запросе после изменения сеанса, приложение не увидит его? Это потому что, когда я изменяю сеанс, я уже отправляю некоторые заголовки или что? –