J'utilise moment.js pour faire la plupart de ma logique de date dans un fichier d'aide pour mes composants React mais je n'ai pas été en mesure de comprendre comment simuler une date dans Jest a la sinon.useFakeTimers()
.
Les documents Jest ne parlent que des fonctions de minuterie telles que setTimeout
, setInterval
etc., mais n'aident pas à définir une date et à vérifier ensuite que mes fonctions de date font ce qu'elles sont censées faire.
Voici quelques-uns de mes fichiers 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;
et voici ce que j'ai mis en place en utilisant 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);
});
});
});
Maintenant, ces tests réussissent car j'utilise moment et mes fonctions utilisent moment mais cela semble un peu instable et j'aimerais fixer la date à une heure fixe pour les tests.
Une idée sur la façon dont cela pourrait être accompli?
Date
similairesvalueOf()
.