2016-04-01 14 views
5

Ho un'app angular2 che voglio testare con il goniometro.Come implementare gli intervalli/il polling in angular2 per lavorare con il goniometro?

In questa applicazione ho una pagina con un grafico che viene aggiornato a intervalli regolari con dati generati automaticamente.

Apparentemente una caratteristica del goniometro è in attesa che gli script e le chiamate HTTP finiscano prima di eseguire il codice di test. Tuttavia, se c'è uno script in continuo polling che non finisce mai, il goniometro attenderà per sempre e scadrà dopo un certo tempo.

In angular1 questo potrebbe essere risolto implementando il polling con $interval, che il goniometro non attende. Purtroppo in angular2 non c'è $interval e il modo corretto per implementare polling sembra essere Observable.interval, quindi questo è ciò che il mio codice è simile:

Observable.interval(500) 
      .map(x => this.getRandomData()) 
      .subscribe(data => this.updateGraph(data)); 

Durante il test di una pagina in cui questo codice è in esecuzione, goniometro scadrà. Aspetta che la pagina finisca il caricamento e pensa che questo script uscirà a volte (quando in realtà gira per sempre).

  • Esiste un meccanismo di intervallo in angular2 che goniometro riconosce, in modo che non aspetta il polling per terminare prima di eseguire i test dell'interfaccia utente?

  • In caso contrario, come posso dire al goniometro di non attendere che questo intervallo termini prima di eseguire più codice di test?

EDIT: Per chiarire, il problema di timeout esisteva già nel goniometro con angular1, ma potrebbe essere risolto utilizzando $interval, vedi:

Questo non funziona in angular2 perché non c'è $interval.

+0

@ close-voter: quale parte non capisci? Sarò felice di spiegare ulteriormente il problema. – magnattic

+0

Copia/pubblica l'articolo sul problema con il goniometro: https://github.com/angular/protractor/issues/3349. e hai trovato una soluzione migliore ora? – zixia

risposta

2

Dopo alcune indagini, ho trovato due possibili soluzioni:

  1. browser.ignoreSynchronization = true istruisce goniometro per smettere di aspettare per le chiamate HTTP e gli script di intervallo. Tuttavia, questo probabilmente renderà la scrittura dei test di e2e molto più difficile, perché ora devi attendere manualmente che gli elementi e le pagine vengano caricati prima di testarli.
  2. Il protractor-xhr-only plugin fondamentalmente fa la stessa cosa di ignoreSynchronization, ma solo per gli script di intervallo. Il goniometro attende ancora le chiamate $http per finire.

Nessuno dei due è una soluzione perfetta, ma meglio di niente.