Тестирование сеансов в колбе с помощью Pytest - PullRequest
0 голосов
/ 08 октября 2018

В настоящее время я работаю над проектом Flask, и мне нужно сделать несколько тестов.

Тест, который я испытываю, касается сессий Flask.

У меня есть такое представление:

@blue_blueprint.route('/dashboard')
"""Invoke dashboard view."""
if 'expires' in session:
    if session['expires'] > time.time():
        pass
    else:
        refresh_token()
        pass
    total_day = revenues_day()
    total_month = revenues_month()
    total_year = revenues_year()
    total_stock_size = stock_size()
    total_stock_value = stock_value()
    mean_cost = total_stock_value/total_stock_size
    return render_template('dashboard.html.j2', total_day=total_day, <br> total_month=total_month, total_year=total_year, total_stock_size=total_stock_size, total_stock_value=total_stock_value, mean_cost=mean_cost)
else:
    return redirect(url_for('blue._authorization'))

И проведите этот тест:

def test_dashboard(client):
    with client.session_transaction(subdomain='blue') as session:
        session['expires'] = time.time() + 10000
        response = client.get('/dashboard', subdomain='blue')
        assert response.status_code == 200

Мой текущий файл conftest.py:

@pytest.fixture
def app():
    app = create_app('config_testing.py')

    yield app


@pytest.fixture
def client(app):
    return app.test_client(allow_subdomain_redirects=True)


@pytest.fixture
def runner(app):
    return app.test_cli_runner(allow_subdomain_redirects=True)

Однако, когда я выполняю тест, я получаю 302код состояния вместо ожидаемого кода состояния 200.

Поэтому мой вопрос заключается в том, как правильно передать значение сеанса?

OBS: при нормальном запуске приложения оператор if для сеанса работает правильно.

1 Ответ

0 голосов
/ 10 октября 2018

Я нахожу решение и хочу поделиться с вами ответом.

В документации API Test Client написано:

При использовании в комбинациис оператором with это открывает транзакцию сеанса.Это можно использовать для изменения сеанса, который использует тестовый клиент.Как только блок with оставлен, сессия сохраняется обратно.

Мы должны поставить assert после с оператором not in, для этой работы, поэтому код должен быть:

def test_dashboard(client):
    with client.session_transaction(subdomain='blue') as session:
        session['expires'] = time.time() + 10000
    response = client.get('/dashboard', subdomain='blue')
    assert response.status_code == 200

Этот простой отступ решает мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...