3

J'écris un test pour une vue cadre de repos Django suit de près la testing documentationvue prévue à appeler avec un argument de mot-clé URL nommé « pk »

Voici mon test simple:

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) 

Cette test échoue avec le message suivant:

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. 

Je ne comprends pas pourquoi cela se produit et comment résoudre ce problème.

  • Les pk kwargs est là dans l'URL,
  • selon les documents il n'y a pas besoin d'ajouter de la valeur lookup-field explicitement si elle par défaut pk,
  • la vue ouvre correctement et pourtant ce test échoue.

Quelqu'un peut-il expliquer pourquoi cette erreur se produit?

Voici le code correspondant:

la 'principale' url.py:

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

pacjent.urls ressemble à ceci:

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

Et PatientDetailApi est ceci:

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

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

Est-ce que cela fonctionne quand vous demandez l'API en dehors de votre test, par exemple via Postman? Ou si vous utilisez l'APIClient? –

+0

C'est le cas. C'était la partie manquante mentionnée par RemcoGerlich. Merci pour votre suggestion! – user1544500

Répondre

12

Les fonctions d'affichage sont appelées avec la requête et les arguments de l'URL. Donc, passez-les:

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

Vous avez sauvé ma journée! Merci beaucoup!!! – user1544500