J'utilise moment.js pour la date et l'heure dans mon application, mais il semble que cela ne fonctionne pas bien avec les capacités moqueuses de Jasmine. J'ai mis en place une suite de tests ci-dessous qui montre mon problème:
jasmine.clock().mockDate
ne semble pas fonctionner pour le moment, alors que cela fonctionne bien pour Date
.
describe('Jasmine tests', function () {
beforeEach(function() {
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
});
// Pass
it('uses the mocked time with Date', function() {
var today = new Date('2015-10-19');
jasmine.clock().mockDate(today);
expect(new Date().valueOf()).toEqual(today.valueOf());
});
// Fail
it('uses the mocked time with moment', function() {
var today = moment('2015-10-19');
jasmine.clock().mockDate(today);
expect(moment().valueOf()).toEqual(today.valueOf());
});
});
Pourquoi Date
fonctionne-t-il comme prévu alors que moment
ne fonctionne pas? moment
n'utilise-t-il pas Date
sous le capot?
Quelle est la bonne façon de se moquer de moment
en utilisant Jasmine?
jasmine.clock().mockDate
s'attend à Date
en entrée. Date
et moment
ne sont pas totalement compatibles. Si vous fournissez la date à simuler dans la spécification elle-même, vous pouvez simplement utiliser Date
à la place.
Si votre code génère un moment que vous souhaitez simuler, ou si vous préférez utiliser l'API Moment, consultez moment.toDate()
. Cette méthode retourne l'objet Date
sauvegardant un moment.
it('uses the mocked time with moment', function() {
var today = moment('2015-10-19').toDate();
jasmine.clock().mockDate(today);
expect(moment().valueOf()).toEqual(today.valueOf());
});