2017-09-28 1 views
-1

私はアプリケーションをテストしています。アドレス「http://127.0.0.1:8000/api/v1/test/api_address/」に来るリクエストを処理する方法をテストする必要があります。 urls.pyのためにクライアントに)(逆通じとして、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) 

コードを完全なアドレスを私にしてください教える:

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

を現在の実装と、動作しません(「マップアドレスを」)逆、エラーで落ちる:

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

あなたがエラーを取得する場合は、全部を投稿する必要があります。 –

答えて

3

DefaultRouterのURL名が自動的に生成され、the docsを確認してください。最初base_nameを設定

# 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') 

は今、あなたのURLがreverse('test-list')reverse('test-detail')を経由して逆アクセス可能、などが他の名前のためのドキュメント内の表を確認してください。

あなたの更新されたテスト:

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

残念ながら、これは役に立ちません: 'django.urls.exceptions.NoReverseMatch: 'api_address'のリバースが見つかりません。 'api_address'は有効な表示関数またはパターン名ではありません。 ' –

+1

[the docs](http://www.django-rest-framework.org/api-guide/routers/)をお読みください。 'DefaultRouter'はあなたのURL名に' -list'と '-detail'を追加します。あなたのテストで私の答えを更新しました。 – olieidel

関連する問題