2017-06-14 3 views
2

J'écris une série de tests de bout en bout pour mon application angulaire (4), en utilisant un rapporteur. Mon backend est configuré pour se connecter à une réplique exacte de la base de données de production, mais rempli de données factices.Se moquer de la date dans Protractor

Une grande partie de mon frontal affiche correctement les données historiques. Actuellement, il y a une certaine période avec les données que je veux afficher. Cependant, dans une semaine, mon affichage "Hebdomadaire" affichera toutes les données comme 0.

Est-il possible de tromper le rapporteur en pensant que la date est dans la période où j'ai ensemencé les données fictives, de sorte que les données affichées sont prévisibles? ?

Mise à jour:

J'ai maintenant ce code:

import * as moment from 'moment'; 

describe('Login & Home Page',() => { 
    beforeEach(() => { 
     let date = moment('08-03-2017'); 
     moment =() => { return date }; 
    }) 
// ... 

Répondre

1

Si vous utilisez constructeur Date dans votre code, vous pouvez remplacer le même.

var d = new Date(2017, 5, 14); 
Date = function(){return d;}; 

Dépend de la façon dont vous obtenez la date dans votre code, mais il remplace la même chose pour retourner les dates souhaitées.

Si vous utilisez le moment, remplacez exactement la ou les mêmes fonctions que vous utilisez.

let date = moment(2017, 6, 14); 
moment =() => {return date}; 

describe('Login & Home Page',() => { 
    let realMoment = moment; 
    let moment = function(){ 
     this.prototype = realMoment.prototype; 
     return realMoment('08-03-2017', 'MM-DD-YYYY'); 
    }; 
    beforeEach(() => { 
    }); 
    it('expect moment(\'asd\') to return 08-03-2017',() => { 
     expect(moment('asd').format('MM-DD-YYYY')).toBe('08-03-2017')) 
    }); 

Eh bien, je suppose que jasmine.clock.mockDate() est la voie réelle d'aller

var today = moment('2015-10-19').toDate(); 
jasmine.clock().mockDate(today); 
expect(moment().valueOf()).toEqual(today.valueOf()); 
+0

J'utilise le constructeur 'instant()'. Ce que je ne comprends pas est où je suis censé remplacer cette fonction? Dans le 'BeforeEach()' de mes tests de rapporteur? –

+0

Vous pouvez le faire dans 'beforeEach()' si vous voulez qu'il s'applique à tous les éléments de la suite, ou vous pouvez le faire dans 'it' si vous voulez que cette modification soit limitée à un seul test. Les deux devraient fonctionner. J'espère que vous utilisez un «moment» global. Assurez-vous également de fournir des alias à d'autres fonctions 'moment 'que vous avez utilisées dans votre code, sinon cela échouera. – sabithpocker

+0

OK, si vous voyez ma question mise à jour, vous pouvez voir ce que, cependant, je reçois l'erreur du compilateur '[ts] Impossible d'assigner 'moment' parce que ce n'est pas une variable', comment faire dans TypeScript –