Je teste une fonction qui prend une date comme argument facultatif. Je souhaite affirmer qu'un nouvel objet Date est créé si la fonction est appelée sans l'argument.
var foo = function (date) { var d = date || new Date(); return d.toISOString(); }
Comment puis-je affirmer que la new Date
est appelée?
Jusqu'à présent, j'ai quelque chose comme ça:
it('formats today like ISO-8601', function () { spyOn(Date, 'prototype'); expect().toHaveBeenCalled(); });
Voir: https://github.com/pivotal/jasmine/wiki/Spies
Crédit à @HMR. Test que j'ai écrit pour vérifier:
it('Should spy on Date', function() { var oldDate = Date; spyOn(window, 'Date').andCallFake(function() { return new oldDate(); }); var d = new Date().toISOString; expect(window.Date).toHaveBeenCalled(); });
D'un exemple de jasmin,
jasmine.clock().install(); var baseTime = new Date(2013, 9, 23); jasmine.clock().mockDate(baseTime); jasmine.clock().tick(50) expect(new Date().getTime()).toEqual(baseTime.getTime() + 50); afterEach(function () { jasmine.clock().uninstall(); });
Date de jasmin
Pour moi, cela a fonctionné avec:
spyOn(Date, 'now').and.callFake(function() { return _currdate; });
Au lieu de .andCallFake
(en utilisant "grunt-contrib-jasmine": "^ 0.6.5", qui semble inclure jasmine 2.0.0)
Pour les utilisateurs qui utilisent la version Edge de Jasmine :
it('Should spy on Date', function() { var oldDate = Date; // and.callFake spyOn(window, 'Date').and.callFake(function() { return new oldDate(); }); var d = new Date().toISOString; expect(window.Date).toHaveBeenCalled(); });
Cela a fonctionné pour moi
var baseTime = new Date().getTime(); spyOn(window, 'Date').and.callFake(function() { return {getTime: function(){ return baseTime;}}; });