la-gregory
Version:
jest date mocks
81 lines • 2.6 kB
JavaScript
;
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setPerformanceOffset = exports.clearDateMock = exports.setDate = exports.advanceDate = void 0;
var nowDate = undefined;
// performance.now() = nowDate + performanceOffset
var performanceOffset = 0;
var now = function () { return nowDate; };
var mockDateClass = function (OriginalDate) {
// if undefined, use real date, or else mock date
var mockNow = function () { return (now() === undefined ? OriginalDate.now() : now()); };
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function Date() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var dateArgs = args.length === 0 ? [mockNow()] : args;
var instance = new (OriginalDate.bind.apply(OriginalDate, __spreadArrays([void 0], dateArgs)))();
// @ts-ignore
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
return instance;
}
Date.prototype = Object.create(OriginalDate.prototype);
Object.setPrototypeOf(Date, OriginalDate);
Date.now = function () { return mockNow(); };
Date.__OriginalDate__ = OriginalDate;
return Date;
};
var MockDate = mockDateClass(Date);
if (global.window) {
// dom env
global.window.Date = MockDate;
global.window.performance.now = function () {
return MockDate.now() + performanceOffset;
};
}
else {
// node / native env
global.Date = MockDate;
require('perf_hooks').performance.now = function () {
return MockDate.now() + performanceOffset;
};
}
/**
* Move date by offset `ms`
*/
exports.advanceDate = function (ms) {
if (nowDate === undefined) {
nowDate = ms;
}
else {
nowDate += ms;
}
};
/**
* Set date to absolute value
*/
exports.setDate = function (dateOrMs) {
nowDate = dateOrMs instanceof Date ? dateOrMs.getTime() : dateOrMs;
};
/**
* Clear date mock
*/
exports.clearDateMock = function () {
nowDate = undefined;
performanceOffset = 0;
};
/**
* Set offset between performance.now() and Date.now()
*/
exports.setPerformanceOffset = function (offset) {
performanceOffset = offset;
};
//# sourceMappingURL=index.js.map