3

Я пишу тест для зрения Django Rest Framework следующим тесно testing documentationОжидаемый вид будет называться с аргументом URL ключевого слова с именем «рк»

в Вот мой простой тест:

def test_patient_detail_api_opens(self): 
    factory = APIRequestFactory() 
    view =PatientDetailApi.as_view() 
    request = factory.get(reverse('api_pacjent', kwargs={'pk' :1})) 
    force_authenticate(request, user=self.user) 
    response = view(request) 
    self.assertEqual(response.status_code, 200) 

Это тест не работает со следующим сообщением:

AssertionError: Expected view PatientDetailApi to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly. 

Я не понимаю, почему это происходит и как это исправить.

  • В pk kwargs есть в URL,
  • согласно документации нет необходимости добавлять значение lookup-field явно, если он по умолчанию в pk,
  • вид открывается правильно, и все же этот тест не пройден. ..

Может кто-нибудь объяснить причину возникновения этой ошибки?

Вот соответствующий код:

'главные' url.py:

urlpatterns = [ 
    url(r'^pacjent/', include('pacjent.urls')), 
] 

pacjent.urls выглядит следующим образом:

url(r'^api/szczegoly/(?P<pk>\d+)/$', PatientDetailApi.as_view(), name="api_pacjent"), 

И PatientDetailApi это:

class PatientDetailApi(generics.RetrieveUpdateAPIView): 
    model = Patient 
    serializer_class = PatientDetailsSerializer 
    queryset = Patient.objects.all() 

    authentication_classes = (SessionAuthentication, BasicAuthentication) 
    permission_classes = (IsAuthenticated,) 
+0

Это работает, когда вы на самом деле запрашиваете api вне своего теста, например, через Postman? Или если вы используете APIClient? –

+0

Он делает. Это была недостающая часть, упомянутая RemcoGerlich. Спасибо за ваше предложение! – user1544500

ответ

12

Функции просмотра вызываются с запросом и аргументами из URL-адреса. Так передайте их:

response = view(request, pk=1) 
+2

Ты спас мой день! Большое спасибо!!! – user1544500