私は最新の 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
。これが「本番」で機能しているのに単体テストでは機能していない理由を誰か知っていますか?