我不知道如何设置ClockMock
类使用的日期/时间。在文档中:
另外,对函数
date()
进行了模拟,因此,如果未指定时间戳,则使用模拟的时间。其他具有可选时间戳参数(默认为time()
)的函数仍将使用系统时间而不是模拟时间。
这是我试图做的:
class Foo
{
public function now(): string {
return date('Y-m-d');
}
}
/**
* @covers Foo
* @group time-sensitive
*/
class FooTest extends TestCase
{
/**
* @covers Foo::now
*/
public function testNow(): void {
ClockMock::register(Foo::class);
ClockMock::withClockMock('2019-01-01');
$f = new Foo();
static::assertSame('2019-01-01', $f->now());
}
}
断言仍然失败,实际日期为今天的日期。
我什至尝试在测试类的断言中调用date('Y-m-d')
,但它仍返回今天的日期,而不是模拟的日期。
如何设置模拟日期?
答案 0 :(得分:1)
根据源代码(https://github.com/symfony/symfony/blob/4.2/src/Symfony/Bridge/PhpUnit/ClockMock.php#L28),ClockMock::withClockMock()
的参数期望一个数字(由is_numeric
检查并转换为浮点数)作为其第一个参数,并将其用作时间戳记。如果不是数字,它将使用当前的微时间作为时间戳。
所以您的代码可能应该是:
ClockMock::withClockMock(date_create('2019-01-01')->getTimestamp());