Я борюсь с насмешливыми атрибутами в моих тестах Python. Функция, которую я пытаюсь протестировать, продолжает давать сбой, потому что макет, вероятно, возвращает правильное значение, но это неправильный тип (Должно быть строка, а вместо этого MagicMock.
Я нашел этот ответ и понимаю, что мне нужно использовать PropertyMock. Но я не могу заставить его работать ни с менеджером контекста, ни с использованием декоратора @patch. Макет атрибутов в Python mock?
Вот мой тест:
@patch('keys.views.requests.post')
@patch('keys.views.requests.Response.text', new_callable=PropertyMock)
def test_shows_message_when_receives_error(self, mock_response_text ,mock_post):
expected_error = escape(MESSAGE)
data_to_be_received = json.dumps({
"message":"Bad Request",
"errors":[{
"resource":"Application",
"field":"client_id",
"code":"invalid"
}]
})
mock_response_text.return_value = data_to_be_received
response = self.client.get('/users/tokenexchange?state=&code=abc123')
self.assertContains(response, expected_error)
И код, который я тестирую:
def token_exchange(request):
parameters = {'client_id': '##', 'client_secret': '##', 'code': code}
response = requests.post('https://www.strava.com/oauth/token', parameters)
data_received = json.loads(response.text)
if 'errors' not in data_received:
return HttpResponse(response.text)
else:
return render(request, 'home.html', {'error': STRAVA_AUTH_ERROR})
Ошибка, которую я продолжаю получать:
File "##", line 66, in token_exchange
data_received = json.loads(response.text)
TypeError: the JSON object must be str, bytes or bytearray, not 'MagicMock'
Спасибо за ваши ответы !!!