Ich verwende moment.js, um die meisten meiner Datumslogik in einer Hilfsdatei für meine React-Komponenten zu machen, aber ich konnte nicht herausfinden, wie man ein Datum in Jest a la sinon.useFakeTimers() vortäuscht.Wie stelle ich ein Mock Date in Jest ein?
Die Jest Docs sprechen nur über Timer-Funktionen wie setTimeout, setInveral etc aber helfen nicht bei der Festlegung eines Datums und dann überprüfen, dass meine Date-Funktionen tun, was sie tun sollen. Hier
ist einige meiner JS-Datei:
var moment = require('moment');
var DateHelper = {
DATE_FORMAT: 'MMMM D',
API_DATE_FORMAT: 'YYYY-MM-DD',
formatDate: function(date) {
return date.format(this.DATE_FORMAT);
},
isDateToday: function(date) {
return this.formatDate(date) === this.formatDate(moment());
}
};
module.exports = DateHelper;
und hier ist das, was ich aufgebaut habe mit Jest:
jest.dontMock('../../../dashboard/calendar/date-helper')
.dontMock('moment');
describe('DateHelper', function() {
var DateHelper = require('../../../dashboard/calendar/date-helper'),
moment = require('moment'),
DATE_FORMAT = 'MMMM D';
describe('formatDate', function() {
it('should return the date formatted as DATE_FORMAT', function() {
var unformattedDate = moment('2014-05-12T00:00:00.000Z'),
formattedDate = DateHelper.formatDate(unformattedDate);
expect(formattedDate).toEqual('May 12');
});
});
describe('isDateToday', function() {
it('should return true if the passed in date is today', function() {
var today = moment();
expect(DateHelper.isDateToday(today)).toEqual(true);
});
});
});
Nun sind diese Tests bestehen, weil ich zur Zeit bin mit und meine Funktionen nutzen Moment, aber es scheint ein bisschen instabil und ich möchte das Datum auf eine feste Zeit für die Tests setzen.
Irgendeine Idee, wie das erreicht werden könnte?
Hier ist ein wenig schönere Verfahren zur Bestimmung der tatsächlichen Datum einstellen, die zurückgegeben werden: 'Date.now = jest.fn (() => neues Datum (Date.UTC (2017, 0, 1)). valueOf()); ' – developering