gpt4 book ai didi

php - 在 PhpUnit 中测试 token 过期的正确方法

转载 作者:行者123 更新时间:2023-12-04 07:18:26 25 4
gpt4 key购买 nike

我已经编写了用于获取 JWT token 并将其缓存 59 分钟的服务。我现在正在为此服务编写测试。
在我的 AuthService 中,我有两种方法:

public function getToken(): string
{
$token = $this->cache->getItem('access_token');
// Czy jest token w cache
if ($token->isHit()) {
return $token->get();
} else {
$newToken = $this->getNewToken();
$this->saveTokenInCache($newToken);
return $newToken;
}
}

private function saveTokenInCache($tokenToSave): void
{
$savedToken = $this->cache->getItem('access_token');
$savedToken->set($tokenToSave);
$savedToken->expiresAfter(3540);
$this->cache->save($savedToken);
}
我有一个测试:
 /**
* @test
*/
public function new_token_should_be_fetched_after_expiration()
{
$this->msGraphAuthService->expects($this->exactly(2))
->method('getNewToken');
// getToken
$this->msGraphAuthService->getToken();
// change time
$date = new DateTime();
$date->modify('3541 seconds');
$this->msGraphAuthService->getToken();

}
对于缓存,我正在使用 FileSystemAdapter .
设置函数,模拟 getNewToken方法是:
protected function setUp(): void
{
$kernel = self::bootKernel();
$this->cacheService = new FilesystemAdapter();
$this->serializer = $kernel->getContainer()->get('serializer');
$this->logger = $this->createMock(Logger::class);
$this->msGraphAuthService =$this>getMockBuilder(MicrosoftGraphAuthService::class)
->onlyMethods(['getNewToken'])
->setConstructorArgs([$this->logger, "", "", "", ""])
->getMock();
$this->msGraphAuthService
->method('getNewToken')
->willReturn('{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":"eyJ..."}');
}
我在测试中的确切目标 new_token_should_be_fetched_after_expiration 是检查是否 getNewToken 方法刚好被调用了 2 次,但我怎么能比现在晚 59 分钟呢?
我试图做这样的事情:
 $date = new DateTime();
$date->modify('3541 seconds');
但它不起作用。
我将不胜感激。

最佳答案

看起来时间是 getNewToken() 的隐藏依赖.
使依赖更加明显。例如。是吗$_SERVER['REQUEST_TIME']或者更专注的 $date默认为它的参数(或您在实现中拥有的任何参数):

...
$date = new DateTime();
$token = $this->getNewToken($date);
...
然后,您可以轻松创建即将过期、已经过期的 token 和/或您也可以删除时间对检查例程的隐藏依赖性。

关于php - 在 PhpUnit 中测试 token 过期的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68654431/

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