What is mockdate?
The mockdate npm package is designed for testing JavaScript code that relies on dates. It allows developers to temporarily 'mock' or 'fake' the current date and time, making it possible to simulate specific temporal conditions in tests without altering the system's actual clock. This is particularly useful for ensuring consistent test results and for testing time-sensitive code paths.
What are mockdate's main functionalities?
Set a mock date
This feature allows you to set the current date and time to a specific value. It's useful for testing how your application behaves on specific dates and times.
MockDate.set('2023-04-01T00:00:00.000Z');
Reset to the system's current date
After setting a mock date, you can use this feature to reset the system's date and time back to its real current value. This is particularly useful to clean up after tests that require mocking the date.
MockDate.reset();
Set a mock date with a specific timezone offset
In addition to setting a mock date, you can specify a timezone offset in minutes. This allows for more precise control over the mocked date and time, accommodating tests that are sensitive to timezones.
MockDate.set('2023-04-01T00:00:00.000Z', 120);
Other packages similar to mockdate
sinon
Sinon is a comprehensive testing utility that, among other features, includes the ability to stub JavaScript's Date object. Compared to mockdate, Sinon offers a broader range of testing functionalities beyond date mocking, such as spies, stubs, and mocks for JavaScript functions.
timekeeper
Timekeeper is a simple package for controlling the system time in JavaScript. It's similar to mockdate in its purpose of mocking the current time for testing purposes. However, timekeeper has a simpler API and fewer features, focusing solely on freezing and traveling in time without the additional timezone offset control that mockdate offers.
lolex
Lolex is a library for JavaScript and Node.js that allows for the mocking of the system clock. It provides functionalities similar to mockdate but extends its capabilities to include mocking of timers (setTimeout, setInterval, etc.). This makes lolex a more versatile choice for testing time-dependent code.
MockDate
A JavaScript Mock Date object that can be used to change when "now" is.

Installation
npm install mockdate --save-dev
Environment Support
MockDate has been tested in Node, IE9+, Chrome, Firefox, and Opera.
Usage
import MockDate from 'mockdate'
API
MockDate.set(date)
date
date: Object
The Date
to be returned when no parameters are passed to new Date()
. Supports any object that has a .valueOf
method that returns a value that can be passed to new Date()
.
date: String
The string representation of the date which is passed to the new Date()
constructor. This creates the Date
to be returned when no parameters are passed to new Date()
.
date: Number
The millisecond representation of the Date
to be returned when no parameters are passed to new Date()
.
MockDate.reset();
Will restore the original Date
object back to the native implementation.
Example
MockDate.set('2000-11-22');
new Date().toString()
MockDate.set('1/30/2000');
new Date().toString()
MockDate.set(new Date('2/20/2000'));
new Date().toString()
MockDate.set(moment('3/30/2000').toDate());
new Date().toString()
MockDate.reset();
new Date().toString()
Test
npm test