How to mock moment.utc() for unit tests?

Moment lets you Change Time Source

If you want to change the time that Moment sees, you can specify a method that returns the number of milliseconds since the Unix epoch (January 1, 1970).

The default is:

moment.now = function () {
    return +new Date();
}

This will be used when calling moment(), and the current date used when tokens are omitted from format(). In general, any method that needs the current time uses this under the hood.

So you can redefine moment.now to get the custom output when you code executes moment.utc().


If you just want to override the utc function and nothing else is working, try adding this in your test suite

moment.prototype.utc = sinon.stub().callsFake(() => new Date(1970, 1, 1, 0, 0));

or

moment.prototype.utc = jest.fn().mockReturnValue(new Date(1970, 1, 1, 0, 0));