Se moquant de dates dans AngularJS / Jasmin tests
J'ai une directive qui initialise la Date de l'objet à plusieurs reprises dans plusieurs fonctions.
Lorsque les tests Unitaires, les différentes fonctions que je peux gérer cogner la date comme ceci:
(function (global) {
var NativeDate = global.Date;
global.stubDateConstructor = function (fakeDate) {
global.Date = function () {
global.Date = NativeDate;
return fakeDate;
}
}
}(this));
//ageInYears()
it("should return the age in years of the person given his/her birthdate", function() {
stubDateConstructor(new Date('2010/01/01'));
expect(ageInYears('01-01-1990')).toBe(20);
stubDateConstructor(new Date('2010/01/01'));
expect(ageInYears('01-01-1900')).toBe(110);
});
Pour unittesting la directive elle-même, qui appelle à la ageInYears et plusieurs autres fonctions semblables, ce n'est pas pour travailler comme je après un appel à Date() stubDateConstructor aura Date de réinitialisation() à la Date réelle de l'objet.
Est-il de façon native dans AngularJS /Jasmin pour gérer ces situations, ou dois-je chercher dans Sinon par exemple?
- il lève sur moi, maintenant que je pourrais avoir à initialiser la date et le passer à des fonctions exigeant d'elle ... peut-être que c'est la meilleure solution?
- Je suis un fan de Timecop.js moi-même. Une bibliothèque avec des fonctions comme Timecop.voyage et Timecop.gel obtient mon approbation.
- il ressemble sinon.js pourrait aussi fournir un temps de moqueries qui s'applique à des dates (en fonction de la prise en charge du navigateur) sinonjs.org/docs/#clock
Vous devez vous connecter pour publier un commentaire.
Jasmin (2.2) de l'Horloge peut se moquer de dates et de l'heure.
http://jasmine.github.io/2.2/introduction.html#section-Mocking_the_Date
Par exemple (à partir de la documentation):
Une solution simple serait de créer un Angulaires
Dates
service qui fournitDate
objets pour vous - il pourrait même juste une seule méthode -Dates.now()
- qui renvoie la date actuelle en retournantnew Date()
. Vous pouvez ensuite utiliser ce service à chaque fois que quelque chose doit obtenir la date actuelle.Ceci vous permet alors d'injecter un autre
Dates
service lors de tests unitaires, par exemple celle qui renvoie toujours à une date spécifique de votre choix lorsqu'il est appelé, plutôt qu'à l'heure actuelle.angulaire.se moquer.TzDate serait une meilleure natif de rechange ici. ceci vient en aide angulaire se moque et vraiment sûre de la garde de votre test à partir du système de fuseau horaire ou toute autre dépendances
https://docs.angularjs.org/api/ngMock/type/angular.mock.TzDate
ce qui est bien avec le Jasmin ou moka
J'ai été en mesure de se moquer à l'aide d'une combinaison de sinon est faux minuteries pour se moquer de la fenêtre des minuteurs et angulaire du maquette de l'intervalle de service angulaire de reconnaître les changements de temps . Ici, le countDownService sous test permet l'utilisation en interne de deux javscript
Date
et angulaire est normal intervalle de service quelque Chose comme:Vous voudrez assurez-vous d'inclure sinon js du
sinon-timers-1.8.1.js
dans votre karma.conf.js les fichiers de la propriété, trop.