Я тестирую свой код, пока все хорошо. Но теперь мне нужно протестировать функцию, используя request.get () для вызова API. Насколько я понимаю, я должен «смоделировать» эту функцию в моем тесте.
Моя функция вызывает Google Maps API, и в своем тесте я добавил желаемый результат:
result =
{
"candidates":[
{
"geometry":{
"location":{
"lat":-34.5453062,
"lng":-58.44977489999999
}
},
"name":"Stade Monumental Antonio Vespucio Liberti",
"place_id":"ChIJ340B5jq0vJURijD6W6dgfz0"
}
]
}
return json.dumps(result)
Эта функция, которую я тестирую:
def get_lat_lng (self):
self.input_api = '%20'.join(self.parsed_question)
self.input_api = ' '.join(self.parsed_question)
self.google_api_url = 'https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input={}&inputtype=textquery&fields=geometry,name,place_id&types=point_of_interest&key={}'.format (self.input_api, api_key)
self.r = requests.get (url = self.google_api_url)
self.data = self.r.json()
self.name = self.data['candidates'][0]['name']
self.place_id = self.data['candidates'][0]['place_id']
self.lat = self.data['candidates'][0]['geometry']['location']['lat']
self.lng = self.data['candidates'][0]['geometry']['location']['lng']
return (self.lat, self.lng, self.place_id)
И мой тест пока:
def test_get_lat_lng (monkeypatch):
monkeypatch.setattr('requests.get', mock_get_lat_lng)
Это код ошибки, который я получаю при попытке запустить тест:
self.r = requests.get (url = self.google_api_url)
> self.data = self.r.json()
E AttributeError: 'str' object has no attribute 'json'
Я не понимаю, так как я использую json .dumps () на желаемом выводе, чтобы «смоделировать» ответ из request.get (), как это может быть объект 'str'? Ищу тип self.r
получаю <class 'requests.models.Response'>
.