РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1196 of 1392 menu

Метод freezeTime

Метод freezeTime применяется в тестах Laravel для заморозки времени. Он возвращает экземпляр Carbon с зафиксированным моментом времени. Это позволяет избежать проблем с плавающим временем при тестировании функциональности, которая зависит от текущей даты и времени, например, сроков действия, расписаний или временных меток.

Синтаксис

<?php $this->freezeTime(); ?>

Метод не принимает параметров и возвращает объект Carbon, представляющий замороженное время.

Пример

Давайте протестируем метод, который возвращает текущую дату в отформатированном виде:

<?php namespace AppHelpers; use CarbonCarbon; class DateHelper { public static function getCurrentDate() { return Carbon::now()->format('Y-m-d'); } } ?>
<?php namespace TestsUnit; use TestsTestCase; use AppHelpersDateHelper; class DateHelperTest extends TestCase { public function testGetCurrentDate() { $frozenTime = $this->freezeTime(); $res = DateHelper::getCurrentDate(); $this->assertEquals($frozenTime->format('Y-m-d'), $res); } } ?>

Результат выполнения кода:

"Test passed"

Пример

Протестируем метод, который проверяет, истек ли срок действия токена:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use CarbonCarbon; class Token extends Model { protected $fillable = ['expires_at']; public function isExpired() { return Carbon::now()->gt($this->expires_at); } } ?>
<?php namespace TestsUnit; use TestsTestCase; use AppModelsToken; use CarbonCarbon; class TokenTest extends TestCase { public function testTokenIsExpired() { $frozenTime = $this->freezeTime(); $token = new Token([ 'expires_at' => $frozenTime->copy()->subDay() ]); $this->assertTrue($token->isExpired()); } public function testTokenIsNotExpired() { $frozenTime = $this->freezeTime(); $token = new Token([ 'expires_at' => $frozenTime->copy()->addDay() ]); $this->assertFalse($token->isExpired()); } } ?>

Результат выполнения кода:

"Test passed" "Test passed"

Пример

Протестируем метод, который создает записи с временными метками:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use CarbonCarbon; class Post extends Model { protected $fillable = ['title', 'content', 'scheduled_at']; public static function scheduleForToday($title, $content) { return self::create([ 'title' => $title, 'content' => $content, 'scheduled_at' => Carbon::now() ]); } } ?>
<?php namespace TestsUnit; use TestsTestCase; use AppModelsPost; use IlluminateFoundationTestingRefreshDatabase; class PostTest extends TestCase { use RefreshDatabase; public function testScheduleForToday() { $frozenTime = $this->freezeTime(); $post = Post::scheduleForToday('Test Title', 'Test Content'); $this->assertDatabaseHas('posts', [ 'title' => 'Test Title', 'scheduled_at' => $frozenTime->toDateTimeString() ]); } } ?>

Результат выполнения кода:

"Test passed"

Смотрите также

  • метод travel,
    который перемещает время вперёд или назад
  • метод travelTo,
    который устанавливает конкретное время
  • класс TestCase,
    базовый класс для всех тестов
  • метод setUp,
    который выполняется перед каждым тестом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить