Symfony中的PHPUnit会在灯具中缓存时间,打破基于时间的测试

时间:2015-09-17 00:18:09

标签: php symfony phpunit

我的一些测试依赖于时间,为简单起见,我使用了#34;现在"的偏移量。

我在所有测试的设置中运行我的所有灯具。所以在创建对象时,我会做这样的事情:

$start_time = Carbon::now('UTC');
if(($state === 'scheduled') || ($state === 'sent')) {
   $start_time->addHours(5);
} elseif ($state === 'complete') {
   $start_time->subMinutes(5);
}
$entity->setStartTime($start_time);
$manager->persist($entity);

问题是,"现在"似乎总是基于我最后一次清除测试缓存,或者更新了固件的来源。因此,当我在几分钟内运行测试并记录对象时间戳和"现在"在测试中,我得到了这个(在四分钟内运行三次):

[2015-09-17 09:40:07] app.INFO: TIME START: 2015-09-17 04:40:06 [] []
[2015-09-17 09:40:07] app.INFO: TIME NOW: 2015-09-16 23:40:07 [] []

[2015-09-17 09:40:24] app.INFO: TIME START: 2015-09-17 04:40:06 [] []
[2015-09-17 09:40:24] app.INFO: TIME NOW: 2015-09-16 23:40:24 [] []

[2015-09-17 09:44:57] app.INFO: TIME START: 2015-09-17 04:40:06 [] []
[2015-09-17 09:44:57] app.INFO: TIME NOW: 2015-09-16 23:44:57 [] []

这不太理想,因为它会在缓存超过五个小时后开始导致测试失败。

让我的灯具基于当前时间而不是某些明确指定的固定日期变得越来越老,这将是很好的,即使这将是一种解决方法。

我也不想在测试设置函数中使用Carbon :: setTestNow($ someFixedDate),因为我喜欢我的测试在各种不同时间运行而不明确指定时间的想法。

理想情况下,当我运行测试时,灯具实际应该按照您的预期运行 - 使用实际当前时间来创建对象。

我使用Symfony 2.7,PHPUnit 4.4.5。

0 个答案:

没有答案