У меня есть приложение Flask на основе учебника здесь https://flask.palletsprojects.com/en/stable/tutorial/. Учебное пособие поставляется с тестовым набором, но с адаптацией приложения для использования WTForms тесты, которые публикуют данные формы, перестали работать. Я вижу, что это потому, что ни одна из форм не подтверждает, поскольку они не включают токен CSRF. Как я могу добавить токен в отправляемые данные по сообщениям? Я наткнулся на эту довольно старую суть, показывающую, как это сделать, но, кажется, устарела для версии Werkzeug, которую я использую, поскольку она относится к Self.cookie_jar , которая была удалена - https:/ /gist.github.com/singingwolfboy/2fca1de64950d5dfed72.
Я использую Flask == 3.1.0
flask_wtf==1.2.2
pytest==8.3.4
selenium==4.29.0
werkzeug==3.1.3
wtforms==3.2.1
tests/conftest.py
import os
import tempfile
import pytest
from flaskr import create_app
from flaskr.db import get_db, init_db
with open(os.path.join(os.path.dirname(__file__), 'data.sql'), 'rb') as f:
_data_sql = f.read().decode('utf8')
@pytest.fixture
def app():
db_fd, db_path = tempfile.mkstemp()
app = create_app({
'TESTING': True,
'DATABASE': db_path,
})
with app.app_context():
init_db()
get_db().executescript(_data_sql)
yield app
os.close(db_fd)
os.unlink(db_path)
@pytest.fixture
def client(app):
return app.test_client()
@pytest.fixture
def runner(app):
return app.test_cli_runner()
tests/test_auth.py
import pytest
from flask import g, session
from flaskr.db import get_db
def test_register(client, app):
assert client.get('/auth/register').status_code == 200
response = client.post_csrf(
'/auth/register', data={'username': 'a', 'password': 'a'}
, follow_redirects=True)
print(f'{response.status=}')
print(f'{response.response=}')
for x in response.response:
print(x)
assert response.headers["Location"] == "/auth/login"
with app.app_context():
assert get_db().execute(
"SELECT * FROM user WHERE username = 'a'",
).fetchone() is not None
Подробнее здесь: https://stackoverflow.com/questions/794 ... ken-pytest
Тестирование приложения Flask-Wtforms, которое использует токен CSRF (Pytest) ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Тестирование приложения Flask-Wtforms, которое использует токен CSRF (Pytest)
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Токен CSRF, вмешиваясь в TDD - есть ли переменная, которая хранит выход CSRF?
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-