Я работаю над проектом, который использует Django 1.10 и DRF 3.6.4.Когда я обновляю Django до 1.11, многие тесты в классах, которые наследуются от DRF APITestCase
, терпят неудачу со следующей ошибкой:
AttributeError: 'HttpResponseBadRequest' object has no attribute 'data'
В Django 1.10, однако, если я пытаюсь получить доступ к несуществующему атрибутув ответ я получаю:
AttributeError: 'Response' object has no attribute 'ariel'
тестовый клиент DRF расширяет тестовый клиент Django , поэтому я полагаю, что класс изменил свой интерфейс с 1.10 на 1.11 и выполняет некоторую магию и возвращает экземплярэтого нового HttpResponseBadRequest
класса, который не имеет атрибута "data".Тем не менее, я не нашел, чтобы эти изменения были документированы нигде, и я не нашел ни одного обсуждения в Интернете, предлагающего решение для этого.Кто-нибудь знает, что нужно изменить и где я могу найти документацию для нового интерфейса клиента тестирования?
MCVE
views.py
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
class MyView(APIView):
def post(self, request, *args, **kwargs):
return Response({'error': 'My error message'}, status=status.HTTP_400_BAD_REQUEST)
urls.py
from django.conf.urls import url
from myapp import views
urlpatterns = [
url(r'^path/to/view/$', views.MyView.as_view(), name="my_url")
]
test_views.py
from rest_framework import status
from rest_framework.reverse import reverse
from rest_framework.test import APITestCase
class TestMyView(APITestCase):
def test_my_view(self):
response = self.client.post(
reverse('my_url'),
data={'some': 'data'},
format='json',
HTTP_HOST='host.com'
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.data['error'], "My error message")
# The line above passes in Django 1.10 and fails in 1.11
Traceback
E
======================================================================
ERROR: test_my_view (myapp.tests.test_views.TestMyView)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/code/webapp/myapp/tests/test_views.py", line 14, in test_my_view
response.data['error'],
AttributeError: 'HttpResponseBadRequest' object has no attribute 'data'