Estoy usando moment.js para hacer la mayor parte de mi lógica de fecha en un archivo auxiliar para mis componentes de React, pero no he podido averiguar cómo simular una cita en Jest a la sinon.useFakeTimers()
.
Los documentos de Jest solo hablan sobre funciones de temporizador como setTimeout
, setInterval
etc. , pero no ayudan a establecer una fecha y luego verificar que mis funciones de fecha hagan lo que deben hacer.
Aquí hay algunos de mis archivos JS:
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;
y esto es lo que configuré usando 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);
});
});
});
Ahora estas pruebas pasan porque estoy usando moment y mis funciones usan moment, pero parece un poco inestable y me gustaría establecer la fecha en un tiempo fijo para las pruebas.
¿Alguna idea de cómo se podría lograr?
Date
likevalueOf()
.