Comment faux de temps en javascript?
Je voudrais, à se moquer de la Date de constructeur, de sorte que chaque fois que j'appelle new Date(), il est toujours retourner de temps spécifique.
J'ai trouvé Sinon.js fournir useFakeTimers pour se moquer de temps. Mais le code suivant ne fonctionne pas pour moi.
sinon.useFakeTimers(new Date(2011,9,1));
//expect : 'Sat Oct 01 2011 00:00:00' ,
//result : 'Thu Oct 27 2011 10:59:44‘
var d = new Date();
- Remplacer simplement
Date
.Date = function(){return 'Sat Oct 01 2011 00:00:00'};
Vous devez vous connecter pour publier un commentaire.
sinon.useFakeTimers
accepte un timestamp (entier) en tant que paramètre, pas un objet Date.Essayer avec
Si vous utilisez quoi comme
setTimeout
, assurez-vous de lire les docs car leuseFakeTimers
va perturber le comportement attendu de ce code.Comment quelque chose comme cela?
JS:
Vous seriez alors, bien sûr, exécutez:
Date = oldDate;
Quand vous avez voulu remettre les choses à un comportement normal.
Date = oldDate
pendant votreafterEach
Vous pouvez également utiliser Les procurations:
C'est ce dont j'avais besoin pour mon projet. Un peu complexe, mais aussi loin que je peux dire c'est tout le nécessaire. La Date interne() est une drôle de bête. Le code ci-dessous utilise underscorejs.
Que j'ai fait:
sinon.useFakeTimers est à l'aide de lolex en interne. Ainsi il prend en charge l'objet en tant que paramètre pour lolex
est équivalent pour
Ma tâche consistait à utiliser la même date de début sur chaque test d'intégration (la date doit être connecté avec des données dans les fichiers)
Alors, comment je l'utilise
shouldAdvanceTime
permettra lolex et sinon pour ne pas s'arrêter de minuteurs dans mes tests d'intégration.Jetez aussi un oeil sur
config.toFake
paramètre. Il permet d'éviter de se moquant de certaines fonctions telles que lesetTimeout
. Ou tout simplement se moquer de seulementDate
constructeur