Django Rest Framework JWT单元测试

克里斯托夫:

我将JRF包与DRF一起使用进行身份验证。现在,我正在尝试编写一个使用JWT令牌进行身份验证的单元测试。无论如何尝试,我都无法使测试API客户端通过JWT对其进行身份验证。如果我对API客户端(在我的情况下为Postman)执行相同操作,则一切正常。

这是测试用例:

from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework_jwt.settings import api_settings

from backend.factories import member_factory

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER


class MemberTests(APITestCase):
    def test_get_member(self):
        member = member_factory()

        payload = jwt_payload_handler(member.user)
        token = jwt_encode_handler(payload)

        self.client.credentials(Authorization='JWT {0}'.format(token))
        response = self.client.get(reverse('member-detail', kwargs={'pk': member.pk}))
        assert response.status_code == 200

但是我总是得到一个401 Authentication credentials were not provided

response.request我看到令牌存在的情况下,我猜它只是没有被应用。

如果我重写要使用的测试rest_framework.test.RequestsClient并将其实际发送到live_server URL,则它可以工作。

有什么帮助吗?

PS,我知道force_authenticate()登录,但是我希望我的单元测试可以像访问API客户端一样访问API。

dkarchmer:

尝试为此测试设置一个新的APIClient。这是我自己的测试的样子

 def test_api_jwt(self):

    url = reverse('api-jwt-auth')
    u = user_model.objects.create_user(username='user', email='[email protected]', password='pass')
    u.is_active = False
    u.save()

    resp = self.client.post(url, {'email':'[email protected]', 'password':'pass'}, format='json')
    self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)

    u.is_active = True
    u.save()

    resp = self.client.post(url, {'username':'[email protected]', 'password':'pass'}, format='json')
    self.assertEqual(resp.status_code, status.HTTP_200_OK)
    self.assertTrue('token' in resp.data)
    token = resp.data['token']
    #print(token)

    verification_url = reverse('api-jwt-verify')
    resp = self.client.post(verification_url, {'token': token}, format='json')
    self.assertEqual(resp.status_code, status.HTTP_200_OK)

    resp = self.client.post(verification_url, {'token': 'abc'}, format='json')
    self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)

    client = APIClient()
    client.credentials(HTTP_AUTHORIZATION='JWT ' + 'abc')
    resp = client.get('/api/v1/account/', data={'format': 'json'})
    self.assertEqual(resp.status_code, status.HTTP_401_UNAUTHORIZED)
    client.credentials(HTTP_AUTHORIZATION='JWT ' + token)
    resp = client.get('/api/v1/account/', data={'format': 'json'})
    self.assertEqual(resp.status_code, status.HTTP_200_OK)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何编写django-rest-framework api的单元测试?

如何使用Django Rest Framework对HTTP删除进行单元测试

如何对Django rest框架请求进行单元测试?

在django-rest-framework-jwt中存储更多的默认信息

Django Rest Framework单元测试Viewset Mixins

在Django Rest Framework和单元测试中使用嵌套对象

Django REST Framework-用于单元测试的伪造对象

Django Rest Framework-单元测试图像文件上传

在Djoser,django-rest-framework-jwt和django-rest-framework注册后获得令牌

使用Django rest-framework-jwt吊销令牌

注销Django Rest Framework JWT

使用Django Rest Framework JWT时处理CSRF令牌

在Django中对REST端点进行单元测试

覆盖测试Django Rest Framework的工具

如何在Django Rest Framework中使用JWT令牌?

django-rest-framework中的JWT身份验证问题

Django Rest Framework自定义JWT身份验证

Django Rest Framework避免身份验证JWT

如何对Django Rest Framework序列化器的create方法进行单元测试?

Django Rest Framework的ModuleNotFoundError

如何为Slim Framework中内置的REST API编写单元测试?

如何在django-rest-framework中模拟出APIView上的属性以进行单元测试

在Django Rest Framework中执行单元测试时出现TransactionManagementError

如何在Django单元测试中发送格式错误的数据(Django REST框架)

Django Rest Framework测试类错误

使用 Django Rest Framework 进行 JWT 令牌认证

Django Rest Framework JWT 未提供身份验证凭据

如何使用 XML 对 Django Rest Framework 端点进行单元测试?

Django Rest Framework - 单元测试视图集额外操作