gpt4 book ai didi

python - 单元测试 JWT token 过期 : Django REST

转载 作者:行者123 更新时间:2023-11-28 19:19:22 27 4
gpt4 key购买 nike

如何测试尝试刷新过期 token 的情况?或者试图超过 JWT_REFRESH_EXPIRATION_DELTA 的情况?

我正在寻找最 pythonic/djangotacular 的方式来对 token 刷新端点进行单元测试。 AFAICT,我的端点工作正常 - 它正在刷新 token ,当我通过 python REPL 测试它时,它按照我的预期进行。但由于这是我正在修复的记录错误,所以我想在我的测试工具下完成修复。测试正面案例很容易,但我不确定如何从这里开始。我不想做一些延迟循环或类似的事情,因为那会破坏快速和孤立地运行的整个单元测试思想......

我的测试目前使用 response = self.client.post(...) 风格。

最佳答案

我可以想到两种方法来做你想做的事,都涉及使用 mocks .如果你想做严肃的独立单元测试,你必须学会​​使用模拟。 ;)

首先,模拟 validate RefreshJSONWebTokenSerializer 引发 serializers.ValidationError 的方法:

from rest_framework import serializers
@mock.patch('rest_framework_jwt.RefreshJSONWebTokenSerializer.validate')
def test_token_expiry_refresh(self, validate_mock):
validate_mock.side_effect = serializers.ValidationError('Refresh has expired.')
response = self.client.post('/refresh-token-url/')
self.assertEquals(response.status, 400) # I believe it's this code what ValidationError should return

第二个选项有点复杂,意味着使用当前日期时间:

import datetime

# http://stackoverflow.com/a/5437199/356729
class FakeDateTime(datetime):
"A manipulable datetime replacement"
def __new__(cls, *args, **kwargs):
return datetime.__new__(datetime, *args, **kwargs)

@patch('rest_framework_jwt.RefreshJSONWebTokenSerializer.datetime', FakeDateTime)
def test_token_expiry_refresh(self):
FakeDateTime.utcnow = classmethod(lambda cls: datetime.utcnow() + timedelta(0, 10))
response = self.client.post('/refresh-token-url/')
self.assertEquals(response.status, 400)

我更喜欢第一个选项,因为它更容易。

关于python - 单元测试 JWT token 过期 : Django REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28970790/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com