【发布时间】:2021-08-04 15:55:52
【问题描述】:
我已经编写了获取 JWT 令牌并将其缓存 59 分钟的服务。我现在正在为此服务编写测试。 在我的 AuthService 中,我有 2 种方法:
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 分钟呢? p>
我试图做类似的事情:
$date = new DateTime();
$date->modify('3541 seconds');
但它不起作用。
我将不胜感激。
【问题讨论】:
标签: php symfony testing caching phpunit