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éfautpk
, - 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,)
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? –
C'est le cas. C'était la partie manquante mentionnée par RemcoGerlich. Merci pour votre suggestion! – user1544500