Исправление представлений фреймворка отдыха Django для модульного тестирования
вот мое представление, которое я хочу протестировать:
# views.py
from weather.utils import get_weather_data
class CityWeather(APIView):
def get(self, request):
city = request.GET.get('city', None)
if city:
city_weather = get_weather_data(city)
if city_weather:
return Response(city_weather, status=status.HTTP_200_OK)
return Response({"error": "City was not found"}, status=status.HTTP_404_NOT_FOUND)
пока вот мой tests.py:
class TestWeatherAPI(TestCase):
def test_get_weather_data(self):
with mock.patch('weather.utils.get_weather_data') as mock_get:
response_data = {
"current_temperature": "3.1°C",
"current_pressure": 1033,
"current_humidity": 86
}
mock_get.get_weather_data.return_value = response_data
response = self.client.get(reverse('get_city_weather'), {'city': 'London'})
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json(), response_data)
Как мы видим, я хочу изменить только get_weather_data в представлении. Как я могу это сделать?
Ключевым моментом здесь является исправление функции или класса там, где она используется, а не там, где она определена. Итак, предположим, что у вас есть файл с именем views.py с
from weather.utils import get_weather_data
...
class CityWeather...
Тогда вы должны сделать патч следующим образом:
with mock.patch('weather.views.get_weather_data') as mock_get:
С другой стороны, если вы
import weather.utils
и затем использовать полную квалификацию weather.utils.get_weather_data(), тогда вы должны установить патч следующим образом:
with mock.patch('weather.utils.get_weather_data') as mock_get: