Skip to main content

Clock

Accurately simulating time-dependent behavior is essential for verifying the correctness of applications. Learn more about clock emulation.

Note that clock is installed for the entire BrowserContext, so the time in all the pages and iframes is controlled by the same clock.


方法 (Methods)

fastForward

Added in: v1.45 clock.fastForward

Advance the clock by jumping forward in time. Only fires due timers at most once. This is equivalent to user closing the laptop lid for a while and reopening it later, after given time.

使用方式

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

參數

  • ticks long | String#

    Time may be the number of milliseconds to advance the clock by or a human-readable string. Valid string formats are "08" for eight seconds, "01:00" for one minute and "02:34:10" for two hours, 34 minutes and ten seconds.

傳回值


install

Added in: v1.45 clock.install

Install fake implementations for the following time-related functions:

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

Fake timers are used to manually control the flow of time in tests. They allow you to advance time, fire timers, and control the behavior of time-dependent functions. See Clock.runFor() and Clock.fastForward() for more information.

使用方式

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

參數

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

      Time to initialize with, current system time by default.

傳回值


pauseAt

Added in: v1.45 clock.pauseAt

Advance the clock by jumping forward in time and pause the time. Once this method is called, no timers are fired unless Clock.runFor(), Clock.fastForward(), Clock.pauseAt() or Clock.resume() is called.

Only fires due timers at most once. This is equivalent to user closing the laptop lid for a while and reopening it at the specified time and pausing.

使用方式

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

For best results, install the clock before navigating the page and set it to a time slightly before the intended test time. This ensures that all timers run normally during page loading, preventing the page from getting stuck. Once the page has fully loaded, you can safely use Clock.pauseAt() to pause the clock.

// 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

Added in: v1.45 clock.resume

Resumes timers. Once this method is called, time resumes flowing, timers are fired as usual.

使用方式

Clock.resume();

傳回值


runFor

Added in: v1.45 clock.runFor

Advance the clock, firing all the time-related callbacks.

使用方式

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

參數

  • ticks long | String#

    Time may be the number of milliseconds to advance the clock by or a human-readable string. Valid string formats are "08" for eight seconds, "01:00" for one minute and "02:34:10" for two hours, 34 minutes and ten seconds.

傳回值


setFixedTime

Added in: v1.45 clock.setFixedTime

Makes Date.now and new Date() return fixed fake time at all times, keeps all the timers running.

Use this method for simple scenarios where you only need to test with a predefined time. For more advanced scenarios, use Clock.install() instead. Read docs on clock emulation to learn more.

使用方式

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

參數

傳回值


setSystemTime

Added in: v1.45 clock.setSystemTime

Sets system time, but does not trigger any timers. Use this to test how the web page reacts to a time shift, for example switching from summer to winter time, or changing time zones.

使用方式

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

參數

傳回值