Mock Date Constructeur avec Jasmine

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;}}; });