2016-08-18 9 views
1

私はそれを動作させる方法がわからないという問題があります。djangoテストRequestFactoryが動作する経路パラメータを取得できません

urls.py:

urlpatterns = [ 
    url(r'athletes/search$', SearchAthletes.as_view()), 
    url(r'athletes/([0-9]+)$', ViewAthlete.as_view()) 
] 

views.py:

class ViewAthlete(APIView): 

    def get(self, request, id, format=None): 
     athlete = Athlete.objects.get(id=id) 
     serializer = AthleteSerializer(athlete) 
     return Response(serializer.data) 

test.py:

Traceback (most recent call last): File "/tests.py", line 44, in test_view_athlete response = ViewAthlete.as_view()(request)

File "/venv/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view return view_func(*args, **kwargs)

File "/venv/lib/python3.5/site-packages/django/views/generic/base.py", line 68, in view return self.dispatch(request, *args, **kwargs)

File "/venv/lib/python3.5/site-packages/rest_framework/views.py", line 474, in dispatch response = self.handle_exception(exc)

File "/venv/lib/python3.5/site-packages/rest_framework/views.py", line 471, in dispatch response = handler(request, *args, **kwargs) TypeError: get() missing 1 required positional argument: 'id'

0123:

def test_view_athlete(self): 
    tmp = Athlete.objects.order_by('?')[0] 

    request = self.factory.get('/_api/v1/athletes/' + str(tmp.id)) 
    request.user = AnonymousUser() 

    response = ViewAthlete.as_view()(request) 
    self.assertEquals(response.data.id, tmp.id) 

私は次のエラーを取得しておきます

私の理解では、getの機能にidのパラメータが渡されています。ViewAtheleteビュークラスです。これの理由は何ですか?開発環境(テストではありません)では、データを表示しますが、テスト環境はそのルートからの引数を認識しません。

答えて

3

zsepiが言うように、あなたのURLはここでは使用されません。このビューを直接呼び出すのではなく、テストクライアントを使用してURLを「呼び出す」ことができます。ミドルウェアが実行されるという別の利点は、ユーザー属性を個別に割り当てる必要がないことです。

response = self.client.get('/_api/v1/athletes/' + str(tmp.id)) 
3

例えば、フルDjangoの要求スタックを通じてテストするときに私の知る限りurlpatternsが考慮されています。そして、django.test.Clientを通じて全体のURLリゾルバロジックがバイパスされる直接(MyView.as_view()(request))のビューをテストするとき、それはget/post方法

だ使用、およびargs/kwargs、発信者(例:MyView.as_view()(request, 'arg1', 'arg2', id='34'))によって供給される必要

関連する問題