2014-10-02 12 views
12

Sto testando una funzione che accetta una data come argomento facoltativo. Voglio affermare che un nuovo oggetto Date viene creato se la funzione viene chiamata senza l'argomento.Costruttore di date false con Jasmine

var foo = function (date) { 
    var d = date || new Date(); 
    return d.toISOString(); 
} 

Come posso affermare che new Date si chiama?

qualcosa Finora, ho come questo:

it('formats today like ISO-8601', function() { 
    spyOn(Date, 'prototype'); 
    expect().toHaveBeenCalled(); 
}); 

See: https://github.com/pivotal/jasmine/wiki/Spies

+0

Non spie fare questo? Non sono sicuro che tu debba prendere in giro la data. Sei sinceramente preoccupato che scivoli e inizi a tornare un giorno fa o qualcosa del genere? https://github.com/pivotal/jasmine/wiki/Spies –

+2

Funziona? spyOn (window, "Date") – HMR

+0

Stavo ricevendo date diverse in realtà. Timezone thing ... – Rimian

risposta

7

credito a @HMR. Prova ho scritto per verificare:

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(); 
    }); 
+0

Con tale soluzione 'Date.prototype' viene sostituito da spy uno, c'è un'attesa per risolvere il problema? – tomalec

+2

Per gli utenti che utilizzano la versione Edge of * Jasmine *: ' esso ('Dovrebbe spiare Data', function() {var oldDate = Data; // and.callFake spyOn (finestra, 'Data') .and.callFake (function() {return new oldDate(); }); var d = new Date() toISOString;. aspettarsi (window.Date) .toHaveBeenCalled();} ); ' –

+0

Questa non è la strada da percorrere !! usa jasmine.clock() invece –

4

per me ha funzionato con:

spyOn(Date, 'now').and.callFake(function() { 
    return _currdate; 
    }); 

invece di .andCallFake (usando "grugnito-contrib-gelsomino": "^ 0.6.5", che sembra includere gelsomino 2.0.0)

2

Per gli utenti che utilizzano la versione Edge of 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(); 
}); 
22

dall'esempio gelsomino,

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

jasmine date

1

questo ha lavorato per me

var baseTime = new Date().getTime(); 
spyOn(window, 'Date').and.callFake(function() { 
    return {getTime: function(){ return baseTime;}}; 
});