2017-08-16 1 views
1

Voici mon code:aide à se moquer d'un Sinon objet date

var startTime = new Date(startDateTime).toLocaleTimeString("en-US", options); 

Je dois obtenir ce startTime dans mon test unitaire. De connaître les tests unitaires dans une perspective java, je voudrais aborder ce problème comme Comment puis-je me moquer du nouveau constructeur de date? puis Comment puis-je simuler l'appel de la fonction toLocaleTimeString?. Cependant, je ne suis pas sûr que c'est le moyen d'aborder ce problème en javascript.

J'ai essayé plusieurs choses, y compris utiliserFakeTimers de sinon, mais je ne pense pas que ce soit pertinent car je ne m'intéresse pas vraiment au passage du temps.

Voici mon code de test en ce moment luisaient de beaucoup de googler avec le contexte zéro de la façon dont fonctionne SINON:

var whatever = sinon.spy(global, 'Date'); 
sinon.stub(whatever, 'toLocaleTimeString').yields('7:00 PM'); 

, cela donne cependant l'erreur « Tentative d'envelopper toLocaleTimeString de propriété non définie en fonction ».

S'il vous plaît aidez-moi à comprendre la logique derrière la façon dont je suis censé extirper ce genre de fonctionnalité et comment je le fais.

Répondre

1

Vous voulez bouchonner prototype de Date, donc lorsque vous créez un nouveau Date il viendra avec le talon:

const stub = sinon.stub(Date.prototype, 'toLocaleTimeString').returns('7:00 PM') 
new Date().toLocaleTimeString("en-US") 
stub.restore() // or Date.prototype.toLocaleTimeString.restore() 

See the runkit example.

+0

fonctionne comme un charme. J'ai passé beaucoup de temps là-dessus, alors merci beaucoup. – Jeremy