【发布时间】:2018-05-14 13:40:46
【问题描述】:
我使用 DRF 和 JWT 包进行身份验证。现在,我正在尝试编写一个使用 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,它就可以工作。
有什么帮助吗?
P.S.:我知道 force_authenticate() 和 login,但我希望我的单元测试能够像 API 客户端在生产中一样访问 API。
【问题讨论】:
-
你们两个成就了我的一天。谢谢
标签: python django django-rest-framework jwt