Установка даты / времени с помощью Symfony PHPUnit bridge ClockMock - PullRequest
1 голос
/ 31 марта 2019

Я не могу понять, как установить дату / время, используемые классом ClockMock.В документации:

Кроме того, функция date() подвергается проверке, поэтому она использует проверенное время, если отметка времени не указана.Другие функции с необязательным параметром timestamp, который по умолчанию равен 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') внутри утверждения в тестовом классе, но он по-прежнему возвращает сегодняшнюю дату вместо фиктивной даты.

Как установить фиктивную дату?

1 Ответ

1 голос
/ 31 марта 2019

в соответствии с исходным кодом (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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...