跳到主要内容

Clock

准确模拟依赖时间的行为对于验证应用程序的正确性至关重要。了解更多关于时钟模拟的信息。

请注意,时钟安装在整个BrowserContext中,因此所有页面和 iframe 中的时间都由同一个时钟控制。


方法

fastForward

添加于: v1.45 clock.fastForward

通过跳跃式地向前推进时间来提前时钟。只会最多触发一次到期的计时器。这相当于用户合上笔记本电脑一段时间后再次打开,时间已经过去了给定的时长。

用法

page.clock().fastForward(1000);
page.clock().fastForward("30:00");

参数

  • ticks long | String#

    时间可以是提前时钟的毫秒数,也可以是人类可读的字符串。有效的字符串格式包括表示八秒的 "08",表示一分钟的 "01:00",以及表示两小时 34 分钟 10 秒的 "02:34:10"。金丝雀构建中也支持毫秒后缀 "ms"。例如:"10ms" 是 10 毫秒,"100" 是 100 毫秒。

返回值


install

添加于: v1.45 clock.install

为以下与时间相关的函数安装虚假实现

  • Date
  • setTimeout
  • clearTimeout
  • setInterval
  • clearInterval
  • requestAnimationFrame
  • cancelAnimationFrame
  • requestIdleCallback
  • cancelIdleCallback
  • performance

虚假计时器用于手动控制测试中的时间流。它们允许您提前时间、触发计时器以及控制依赖时间函数的行为。更多信息请参阅Clock.runFor()Clock.fastForward()

用法

Clock.install();
Clock.install(options);

参数

  • options Clock.InstallOptions (可选)
    • setTime long | String | Date (可选)#

      初始化时的时间,默认为当前系统时间。

返回值


pauseAt

添加于: v1.45 clock.pauseAt

通过跳跃式地向前推进时间并暂停时间来提前时钟。一旦调用此方法,除非调用了Clock.runFor()Clock.fastForward()Clock.pauseAt()Clock.resume(),否则不会触发计时器。

只会最多触发一次到期的计时器。这相当于用户合上笔记本电脑一段时间后,在指定的时间重新打开并暂停。

用法

SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd");
page.clock().pauseAt(format.parse("2020-02-02"));
page.clock().pauseAt("2020-02-02");

为了获得最佳结果,请在导航到页面之前安装时钟,并将其设置为稍早于预期测试时间的时间。这确保了在页面加载期间所有计时器都能正常运行,防止页面卡住。页面完全加载后,您可以安全地使用Clock.pauseAt()来暂停时钟。

// Initialize clock with some time before the test time and let the page load
// naturally. `Date.now` will progress as the timers fire.
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss");
page.clock().install(new Clock.InstallOptions().setTime(format.parse("2024-12-10T08:00:00")));
page.navigate("http://localhost:3333");
page.clock().pauseAt(format.parse("2024-12-10T10:00:00"));

参数

返回值


resume

添加于: v1.45 clock.resume

恢复计时器。调用此方法后,时间恢复流动,计时器照常触发。

用法

Clock.resume();

返回值


runFor

添加于: v1.45 clock.runFor

提前时钟,触发所有与时间相关的回调。

用法

page.clock().runFor(1000);
page.clock().runFor("30:00");

参数

  • ticks long | String#

    时间可以是提前时钟的毫秒数,也可以是人类可读的字符串。有效的字符串格式包括表示八秒的 "08",表示一分钟的 "01:00",以及表示两小时 34 分钟 10 秒的 "02:34:10"。金丝雀构建中也支持毫秒后缀 "ms"。例如:"10ms" 是 10 毫秒,"100" 是 100 毫秒。

返回值


setFixedTime

添加于: v1.45 clock.setFixedTime

使 Date.nownew Date() 始终返回固定的虚假时间,同时保持所有计时器运行。

将此方法用于只需要在预定义时间进行测试的简单场景。对于更高级的场景,请改用Clock.install()。阅读时钟模拟文档以了解更多信息。

用法

page.clock().setFixedTime(new Date());
page.clock().setFixedTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setFixedTime("2020-02-02");

参数

返回值


setSystemTime

添加于: v1.45 clock.setSystemTime

设置系统时间,但不触发任何计时器。使用此方法可以测试网页如何对时间偏移作出反应,例如从夏令时切换到冬令时,或更改时区。

用法

page.clock().setSystemTime(new Date());
page.clock().setSystemTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setSystemTime("2020-02-02");

参数

返回值