2012-01-05 11 views
9

ho una linea come questa nel mio codicecome si fa a bloccare/tempo falso con Jasmine BDD

new Date().getFullYear(); 

e ne ho bisogno per tornare sempre nello stesso anno.

C'è un modo per farlo con Jasmine?

Grazie.

+1

Non potresti semplicemente stubare il metodo Date instance come qualsiasi altra classe? –

+0

come vorresti? – Cezar

+0

Allo stesso modo degli esempi nei loro documenti, ma con la data invece - non posso provarlo ora ma penserei che funzionerebbe allo stesso modo. –

risposta

18

In JavaScript è possibile semplicemente sovrascrivere la funzione nella vostra configurazione di prova:

Date.prototype.getFullYear = function(){return 2012} 

Si potrebbe anche usare un jasmine spy:

spyOn(Date, 'getFullYear').andReturn(2012) 

Un altro modo è quello di inserire la data nel vostro si funzione vuoi test. Che è btw il modo migliore per scrivere codice verificabile. Non creare nuove istanze nelle tue funzioni, perché inizi sempre a testare non solo il tuo codice ma anche queste istanze.

+9

Probabilmente dovrebbe essere 'spyOn (Date.prototype, 'getFullYear'). AndReturn (2012)'. –

+1

Questo ha funzionato per me: 'spyOn (Date.prototype, 'getFullYear'). And.returnValue (2012)' – Sam

+0

Se si sovrascrive la funzione, assicurarsi di ripristinarla dopo il test dell'unità in modo che la funzione sovraccaricata non perdita ad altri test, o forse anche l'applicazione. 1. 'const originalGetFullYear = Date.prototype.getFullYear', 2. Esegui il test, 3.' Date.prototype.getFullYear = originalGetFullYear' –

2

Timer falsi Sinon.js.

http://sinonjs.org/docs/#clock

ho costruito una drum machine in Node.js utilizzare questo nelle mie specifiche per controllare il codice di temporizzazione. ma ci ho lavorato anche su un altro progetto in cui l'unico modo per ottenere l'anno che volevo era quello di utilizzare un anno specifico, credo per qualche motivo nel 1969. Immagino che sia l'inizio dell'era Unix.

in ogni caso, era quasi un anno fa, quindi probabilmente l'hanno già risolto.

+0

Unix Time avviato il 1/1/1970. Era un giovedì. :) – Rimian

+0

dov'è la drum machine? – Exitos