Почему в тестах выдает ошибку 'Response' object has no attribute 'items'?

Сам тест
@pytest.fixture
def client():
    app.config['TESTING'] = True
    with app.test_client() as cl:
        with app.app_context():
            yield cl

def test_auth(client):
    payload = {
        'username': 'testing',
        'password': 'hard_pass'
    }
    resp = client.post('/login', data=jsonify(payload))
    assert resp.status_code == 200

views.py, на данный момент, выглядит следующим образом
@app.route('/login', methods=['POST'])
def login():
    return 'This is your login'

Ошибка следующая:
d = <Response 46 bytes [200 OK]>, args = (), kwargs = {}

>   iteritems = lambda d, *args, **kwargs: iter(d.items(*args, **kwargs))
E   AttributeError: 'Response' object has no attribute 'items'

blog_env\lib\site-packages\werkzeug\_compat.py:135: AttributeError
  • Вопрос задан
  • 2451 просмотр
Решения вопроса 1
@nitron_5 Автор вопроса
Сама проблема была с
data=jsonify(payload)
jsonify(payload) формировал
<Response 46 bytes [200 OK]>
На это нужно было сразу обратить внимание ибо код дальше client.post не проходил.
Убрал jsonify и тест прошел успешно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@iddqda
network engineer, netdevops
потому что функции, декорируемые @app.route должны возвращать Response object

короче вот так правильно
return Response("This is your login", status=200, content_type="text/plain")


или если json то вот так проще:
return jsonify({"message": "This is your login"}), 200
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы