2017-09-28 2 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') 

을 현재의 구현, 작동하지 않습니다 ('지도 주소') 역 오류가 떨어지는 : DefaultRouter에 대한

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

오류가 발생하면, 당신은 모든 일을 게시해야한다. –

답변

3

는 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

관련 문제