Как подделать мой ответ в pytest запросах на макет - PullRequest
1 голос
/ 02 марта 2020

Моя функция, которую я пытаюсь проверить, возвращает list из strings:

def listForumsIds:
    response = requests.get(url)
    forums= response.json().get('forums')
    forumsIds= [forum['documentId'] for forum in forums]
    # return like: ['id1', 'id2', 'id3'.....]
    return forumsIds

Моя функция тестирования:

@requests_mock.mock()
def test_forms(self, m):
    # I also used json='response'
    m.get('valid url', text="response", status_code=200)
    resp = listForumsIds('valid url')
    # ERROR !!!!
    assert resp == "response"

Я получаю сообщение об ошибке, подобное: json.decoder.JSONDecodeError или str object has no attribute get

Как подделать мой ответ, чтобы он соответствовал возвращаемому значению моей функции?

1 Ответ

1 голос
/ 02 марта 2020

Вы должны передать желаемую полезную нагрузку в поле json проверяемого ответа. Пример, адаптированный под ваш код:

class MyTests(unittest.TestCase):

    @requests_mock.mock()
    def test_forms(self, m):
        payload = {"forums": [{"documentId": "id1"}]}
        m.register_uri("GET", "https://www.example.com", json=payload)
        ids = listForumsIds('https://www.example.com')
        assert ids == ['id1']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...