Очистка flask сессии fla sh сообщений после тестов pytest - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть Flask сайт, который я тестирую с помощью pytest. Я хочу проверить, что некоторые представления правильно устанавливают сообщения flask.flash. Я могу сделать это, но сообщения fla sh сохраняются между тестами, и я хотел бы, чтобы они были удалены.

У меня есть это test_client приспособление:

@pytest.fixture(scope="session")
def app():
    # create_app() returns a configured Flask app:
    app = create_app("testing")
    with app.test_request_context():
        yield app

@pytest.fixture(scope="session")
def test_client(app):
    with app.test_client() as c:
        yield c

И у меня есть такие тесты:

from flask import session

def test_my_redirect_view(test_client):
    "It should redirect and set the correct flash message"
    response = test_client.get("/my/path", follow_redirects=False)

    assert response.status_code == 302
    assert response.location == "http://localhost/a/different/url"

    assert "_flashes" in session
    assert len(session["_flashes"]) == 1
    assert session["_flashes"][0][0] == "warning"
    assert session["_flashes"][0][1] == "My error message"

Как я уже сказал, при условии, что мой взгляд устанавливает это сообщение fla sh и перенаправляет правильно, этот тест проходит. Но последующий аналогичный тест не пройден, потому что тогда len(session["_flashes"]) будет 2, потому что он содержит сообщения от обоих протестированных представлений.

Я пытался сделать это в конце каждого теста, но без видимого эффекта:

    del session["_flashes"][0]

1 Ответ

0 голосов
/ 19 февраля 2020

Это не идеальный ответ, потому что он не гарантирует, что протестированное представление устанавливает только одно сообщение fla sh, но сейчас я заменяю строки assert, относящиеся к сообщениям fla sh с:

    assert ("warning", "My error message") in session["_flashes"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...