Макет куки-атрибутов - PullRequest
0 голосов
/ 13 января 2019

Session.cookies определен внутри конструктора Session, и поэтому я не могу его смутить. Есть ли способ высмеять это?

from requests import Session
from settings import URL
from unittest.mock import patch

@patch.object(Session, 'cookies', new='my custom mock object')
def test_request():
    assert function_that_uses_request_cookies()

Это повышает AttributeError: <class 'requests.sessions.Session'> does not have the attribute 'cookies'

Если в области видимости модуля определен экземпляр session, я могу напрямую подключить экземпляр session. Но session определяется только в области действия function_that_uses_request_cookies. Есть ли способ исправить экземпляр внутри области действия функции?

1 Ответ

0 голосов
/ 29 мая 2019

Как написано, код будет исправлять атрибут класса Session, но вы хотите исправить атрибут экземпляра Session. Чтобы сделать это, не прерывая другие аспекты поведения сеанса, вы можете создать фиктивный объект, обертывающий Session.

def test_request():
    mock_session_klass = MagicMock(wraps=Session)
    with patch('requests.Session', new=mock_session_klass):
        session_instance = mock_session_klass.return_value
        session_instance.cookies.return_value = 'my custom mock object'
        assert function_that_uses_request_cookies()
...