Объект Pytest Flask post return 'Response' не имеет атрибута 'items' - PullRequest
0 голосов
/ 03 августа 2020

Я работаю над проектом с использованием Python (3.7) и Falsk, в котором я тестирую свой API. Для запроса POST, когда я отправляю клиенту запроса, используя test_client с правильной полезной нагрузкой, он возвращает ошибку как:

AttributeError: объект 'Response' не имеет атрибута 'items'

Вот что я сделал до сих пор:

From view function:

if request.method == "POST":
    data = request.get_json()
    new_author = data['author']
    new_title = data["title"]
    new_sDescription = data["shortDescription"]
    new_Url = data["thumbnailUrl"]
    new_status = data["status"]
    new_pageCount = data["pageCount"]
    ....
    if None not in (new_author, new_title, new_Url, new_status, new_pageCount
                    , new_sDescription):
        return f"Book with the id: {cursor.lastrowid} created successfully", 201

** Тестовое приспособление: * *

@pytest.fixture
def client():
    app.config['TESTING'] = True
    db_fd, app.config['DATABASE'] = tempfile.mkstemp()

    with app.test_client() as client:
        with app.app_context():
            create_table(app.config['DATABASE'])
            yield client

** Функция отправки запроса: **

def api_post_book(client):
    payload = {
        "author": "Someone",
        "pageCount": 590,
        "shortDescription": "A book from PyTest.",
        "status": "PUBLISH",
        "thumbnailUrl": "https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb-images/adzic.jpg",
        "title": "PyTest is a Fun."
    }
    return client.post('/api',
                       data=jsonify(payload), follow_redirects=True)

** Функция для тестирования: **

def test_api_post_book(client):
    resp = api_post_book(client)
    assert resp.status_code == 201

Если я удалю jsonify он возвращает другую ошибку как:

TypeError: объект 'NoneType' не имеет индекса

1 Ответ

0 голосов
/ 03 августа 2020

Это должно сработать:

return client.post('/api', json=payload, follow_redirects=True)

Или, если вы абсолютно хотите использовать jsonify, используйте:

return client.post('/api', json=jsonify(payload).get_json(), follow_redirects=True)

Вам нужно помнить, что jsonify возвращает объект Response а не json.

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