2

私は最新の django-rest-framework を使用しており、いくつかのテストを作成したいと考えています。ModelViewSet と にアクセスするカスタム権限がありrequest.GETます。これはすべてうまくいきますが、私の単体テストでは GET 辞書は空です。これが私のコードです:

class MyModelViewSet(ModelViewSet):
     ...
     permission_classes = [IsAuthenticated, CustomPermission]
     ...

permissions.py:
class CustomPermission(permissions.BasePermission):
    def has_permission(self, request, view):
       # here I access the GET to check permissions
       id = request.GET.get('id')
       obj = MyModel.objects.get(id=id)

       return request.user == obj.owner

これはすべて、ブラウズ可能な API で期待どおりに機能します。しかし今、私は単体テストを書きました:

class  ModelTestCase(APITestCase):
    def setUp(self):
        self.obj = mommy.make('MyModel') 
        self.user = mommy.make('CustomUser')       

    def test_list(self):
        self.client.force_authenticate(user=self.user)
        url = '%s?id=%s' % (reverse('mymodel-list'), self.obj.id)
        r = self.client.get(url)  # this raises the exception

そして、ここで例外があります:

models.DoesNotExist: MyModel matching query does not exist.

request.GETデバッグ中にが空であることに気付きましたhas_permission。これが「本番」で機能しているのに単体テストでは機能していない理由を誰か知っていますか?

4

1 に答える 1

1

最新リリース (3.2.1) に更新すると、この問題が修正されました。

于 2015-08-07T22:39:41.920 に答える