Mock `window.Date` when run unit test cases with jest. Make tests of `Date` easier.

Usage no npm install needed!

<script type="module">
  import jestDateMockJpike from '';



Mock Date when run unit test cases with jest. Make tests of Date easier.

Build Status Coverage Status npm npm


This should only be installed as a development dependency (devDependencies) as it is only designed for testing.

npm i --save-dev jest-date-mock


In your package.json under the jest, create a setupFiles array and add jest-date-mock to the array.

  "jest": {
    "setupFiles": ["jest-date-mock"]

If you already have a setupFiles attribute you can also append jest-date-mock to the array.

  "jest": {
    "setupFiles": ["./__setups__/other.js", "jest-date-mock"]

More about in configuration section.

Setup file

Alternatively you can create a new setup file which then requires this module or add the require statement to an existing setup file.


import 'jest-date-mock';
// or

Add that file to your setupFiles array:

"jest": {
  "setupFiles": [


Use the only 3 api for test cases.

  • advanceBy(ms): advance date timestamp by ms.
  • advanceTo([timestamp]): reset date to timestamp, default to 0.
  • clear(): shut down the mock system.
import { advanceBy, advanceTo, clear } from 'jest-date-mock';

test('usage', () => {
  advanceTo(new Date(2018, 5, 27, 0, 0, 0)); // reset to date time.

  const now =;

  advanceBy(3000); // advance time 3 seconds
  expect(+new Date() - now).toBe(3000);

  advanceBy(-1000); // advance time -1 second
  expect(+new Date() - now).toBe(2000);

  clear();; // will got current timestamp

More sample code here.

Also, add an API Date.current() to get the actual current timestamp.

import { advanceBy, advanceTo, clear } from 'jest-date-mock';

advanceTo(0); // reset to timestamp = 0; // will got 0

Date.current(); // will got the actual timestamp.