Я новичок в издевательской библиотеке, и пока она доставляет мне неприятности. Я пытаюсь протестировать метод парсинга Url, который получает ответ от initialUrl
, который затем анализируется в методе. Я установил autospec=true
, поэтому я думаю, что он должен иметь доступ ко всем методам в библиотеке запросов (включая response.url
). Я пытаюсь смоделировать как get
, так и response
, хотя я не уверен, нужно ли это?
Мой метод getUrl, который принимает ответ и возвращает его проанализированное содержимое:
def getUrl(response):
if response.history:
destination = urllib.parse.urlsplit(response.url)
baseUrlTuple = destination._replace(path="", query="")
return urllib.parse.urldefrag(urllib.parse.urlunsplit(baseUrlTuple)).url
raise RuntimeError("No redirect")
Метод теста:
def testGetUrl(self):
initialUrl = 'http://www.initial-url.com'
expectedUrl = 'http://www.some-new-url.com'
mock_response = Mock(spec=requests, autospec=True)
mock_response.status_code = 200
mock_get = Mock(return_value=mock_response)
#mock_get.return_value.history = True
resp = mock_get(self.initialUrl)
mock_response.history = True
resultUrl = getBaseUrl(resp)
self.assertEqual(resultUrl, expectedUrl)
Когда я запускаю тест, я получаю
raise AttributeError("Mock object has no attribute %r" % name)
AttributeError: Mock object has no attribute 'url'