Django rest 框架未经身份验证的用户在测试中获取请求错误

Django rest framework unauthenticated user get request error in testing

我正在尝试测试 url 上的获取请求,该请求需要对用户进行身份验证。如果用户未经身份验证,则必须 return HTTP_401 UNAUTHORIZED 错误作为响应状态代码。为此,我创建了一个测试用例,我尝试在没有身份验证的情况下触发获取请求。

测试用例

class PublicTagsApiTests(TestCase):
    """Test the publicly available tags API"""

    def setUp(self):
        self.client = APIClient()

    def test_login_required(self):
        """Test that login is required for retrieving tags"""
        res = self.client.get(reverse('recipe:tag-list'))
        self.assertEqual(res.status_code, status.HTTP_401_UNAUTHORIZED)

但是测试失败return错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'AnonymousUser'

查看

class TagViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
    """Manage tags in the database"""
    authentication_classes =  (TokenAuthentication,)
    permission = (IsAuthenticated,)
    queryset = Tag.objects.all()
    serializer_class = serializers.TagSerializer

    def get_queryset(self):
        """Return objects for the current authenticated user only"""
        return self.queryset.filter(user=self.request.user).order_by('-name')

序列化器

class TagSerializer(serializers.ModelSerializer):
    """Serializer for tag objects"""


    class Meta:
        model = Tag
        fields = ('id','name')
        read_only_fields = ('id',)

如何修改我的视图以通过测试?

在 TagViewSet 中尝试更改:

permission = (IsAuthenticated,)

至:

permission_classes = [IsAuthenticated]