rin*_*t.6 2 php phpunit symfony
我不知道如何设置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());
}
}
Run Code Online (Sandbox Code Playgroud)
断言仍然失败,实际日期是今天的日期。
我什至尝试date('Y-m-d')在测试类中的断言内部调用,但它仍然返回今天的日期而不是模拟日期。
如何设置模拟日期?
根据源代码(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());
Run Code Online (Sandbox Code Playgroud)