Как установить возвращаемое значение запроса get в модульном тесте? - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь установить возвращаемое значение запроса get в python, чтобы выполнить модульный тест, который проверяет, вызван ли запрос post с правильными аргументами. Предположим, у меня есть следующий код для проверки

# main.py
import requests
from django.contrib.auth.models import User

def function_with_get():

    client = requests.session()
    some_data = str(client.get('https://cool_site.com').content)

    return some_data


def function_to_test(data):
    for user in User.objects.all():
        if user.username in data:
            post_data = dict(data=user.username)
        else:
            post_data = dict(data='Not found')

    client.post('https://not_cool_site.com', data=post_data)


#test.py
from unittest import mock
from unittest import TestCase
from main import function_with_get, function_to_test

class Testing(TestCase):
    @mock.patch('main.requests.session')
    def test_which_fails_because_of_get(self, mock_sess):
        mock_sess.get[0].return_value.content = 'User1'

        data = function_with_get()
        function_to_test(data)

        assertIn('Not Found', mock_sess.retrun_value.post.call_args_list[1])

Это, к сожалению, не работает, и я также попытался установить его без content, однако я получаю ошибку AttributeError: у объекта 'str' нет атрибута 'content'

Как правильно установить return_value запроса get, чтобы я мог проверить аргументы запроса post?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Я думаю, что он у вас почти есть, за исключением того, что вы пропускаете возвращаемое значение для session() - потому что session создается для создания экземпляра client. Я думаю, что вы можете сбросить [0] тоже.

Попробуйте:

mock_sess<b>.return_value.</b>get.return_value.content = 'User1'
0 голосов
/ 15 января 2019

Попробуйте с .text, потому что это должно работать для строк.

s = requests.Session()

s.get('https://httpbin.org/cookies/         set/sessioncookie/123456789')
r = s.get('https://httpbin.org/    cookies')

print(r.text)

http://docs.python -requests.org / ен / ведущий / пользователь / продвинутый /

...