2017-09-28 4 views
-1

Je suis en train de tester l'application. Il est nécessaire de tester la méthode de traitement des demandes arrivant à l'adresse 'http://127.0.0.1:8000/api/v1/test/api_address/'. Dites-moi, s'il vous plaît, comme à travers inverse() l'adresse complète au clientErreur lors de l'obtention de l'itinéraire depuis urls.py

class MyTestCase(APITestCase): 

    def setUp(self): 
     self.message = { 
      'username': 'user_name', 
      'password': 'user_password', 
     } 

    def test_get_token(self): 
     response = self.client.post(reverse('api_address'), self.message) 
     self.assertEqual(response.status_code, status.HTTP_201_CREATED) 

Code pour urls.py:

users_router = DefaultRouter() 
users_router.register(r'test', TestViewSet, 'test') 
users_router.register(r'test/api_address', APIAddressRequestSet, 'api_address') 

avec la mise en œuvre actuelle, inverse ('adresse de carte) ne fonctionne pas, tomber avec une erreur:

django.urls.exceptions.NoReverseMatch: Reverse for 'api_address' not found. 'api_address' is not a valid view function or pattern name. 
+2

Si vous obtenez une erreur, vous devez envoyer tout ça. –

Répondre

3

Les noms d'URL pour DefaultRouter sont générés automatiquement, vérifiez the docs.

Définir un base_name premier:

# urls.py  
users_router = DefaultRouter() 
users_router.register(r'test', TestViewSet, base_name='test') 
users_router.register(r'test/api_address', APIAddressRequestSet, 
         base_name='api_address') 

Maintenant vos urls sont inverse accessibles via reverse('test-list')reverse('test-detail'), etc. Consultez le tableau dans la documentation pour les autres noms.

Votre test mise à jour:

class MyTestCase(APITestCase): 

    def setUp(self): 
     self.message = { 
      'username': 'user_name', 
      'password': 'user_password', 
     } 

    def test_get_token(self): 
     # note the appended `-list` to the url name 
     response = self.client.post(reverse('api_address-list'), self.message) 
     self.assertEqual(response.status_code, status.HTTP_201_CREATED) 
+0

Malheureusement, cela n'aide pas: 'django.urls.exceptions.NoReverseMatch: Reverse pour 'api_address' introuvable. 'api_address' n'est pas une fonction de vue valide ou un nom de modèle. » –

+1

Veuillez lire [les documents] (http://www.django-rest-framework.org/api-guide/routers/). Le 'DefaultRouter' ajoutera' -list' et '-detail' à votre nom d'URL. J'ai mis à jour ma réponse avec tes tests. – olieidel